File tree Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -26,7 +26,19 @@ public enum PusherChannelType {
26
26
27
27
@objcMembers
28
28
open class PusherChannel : NSObject {
29
- open var eventHandlers : [ String : [ EventHandler ] ] = [ : ]
29
+ // Access via queue for thread safety if user binds/unbinds events to a channel off the main queue
30
+ // (Concurrent reads are allowed. Writes using `.barrier` so queue waits for completion before continuing)
31
+ private let eventHandlersQueue = DispatchQueue ( label: " com.pusher.pusherswift-channel-event-handlers- \( UUID ( ) . uuidString) " ,
32
+ attributes: . concurrent)
33
+ private var eventHandlersInternal = [ String: [ EventHandler] ] ( )
34
+ open var eventHandlers : [ String : [ EventHandler ] ] {
35
+ get {
36
+ return eventHandlersQueue. sync { eventHandlersInternal }
37
+ }
38
+ set {
39
+ eventHandlersQueue. async ( flags: . barrier) { self . eventHandlersInternal = newValue }
40
+ }
41
+ }
30
42
open var subscribed = false
31
43
public let name : String
32
44
open weak var connection : PusherConnection ?
You can’t perform that action at this time.
0 commit comments