@@ -10,13 +10,15 @@ type baseHandler struct {
10
10
events map [string ]* caller
11
11
name string
12
12
broadcast BroadcastAdaptor
13
+ evMu sync.Mutex
13
14
}
14
15
15
16
func newBaseHandler (name string , broadcast BroadcastAdaptor ) * baseHandler {
16
17
return & baseHandler {
17
18
events : make (map [string ]* caller ),
18
19
name : name ,
19
20
broadcast : broadcast ,
21
+ evMu : sync.Mutex {},
20
22
}
21
23
}
22
24
@@ -26,7 +28,9 @@ func (h *baseHandler) On(event string, f interface{}) error {
26
28
if err != nil {
27
29
return err
28
30
}
31
+ h .evMu .Lock ()
29
32
h .events [event ] = c
33
+ h .evMu .Unlock ()
30
34
return nil
31
35
}
32
36
@@ -40,13 +44,16 @@ type socketHandler struct {
40
44
41
45
func newSocketHandler (s * socket , base * baseHandler ) * socketHandler {
42
46
events := make (map [string ]* caller )
47
+ base .evMu .Lock ()
43
48
for k , v := range base .events {
44
49
events [k ] = v
45
50
}
51
+ base .evMu .Unlock ()
46
52
return & socketHandler {
47
53
baseHandler : & baseHandler {
48
54
events : events ,
49
55
broadcast : base .broadcast ,
56
+ evMu : base .evMu ,
50
57
},
51
58
acks : make (map [int ]* caller ),
52
59
socket : s ,
@@ -146,7 +153,9 @@ func (h *socketHandler) onPacket(decoder *decoder, packet *packet) ([]interface{
146
153
message = decoder .Message ()
147
154
}
148
155
}
156
+ h .evMu .Lock ()
149
157
c , ok := h .events [message ]
158
+ h .evMu .Unlock ()
150
159
if ! ok {
151
160
// If the message is not recognized by the server, the decoder.currentCloser
152
161
// needs to be closed otherwise the server will be stuck until the e
0 commit comments