Browse Source

PR changes

Sebastian Thiebaud 7 years ago
parent
commit
0d25ef84b2
1 changed files with 8 additions and 6 deletions
  1. 8 6
      Sources/SwiftGRPC/Core/Channel.swift

+ 8 - 6
Sources/SwiftGRPC/Core/Channel.swift

@@ -73,6 +73,7 @@ public class Channel {
   }
 
   deinit {
+    connectivityObservers.forEach { $0.shutdown() }
     cgrpc_channel_destroy(underlyingChannel)
     completionQueue.shutdown()
   }
@@ -101,8 +102,7 @@ public class Channel {
   ///
   /// - Parameter callback: block executed every time a new connectivity state is detected
   public func subscribe(callback: @escaping (ConnectivityState) -> Void) {
-    let observer = ConnectivityObserver(underlyingChannel: underlyingChannel, currentState: connectivityState(), callback: callback)
-    connectivityObservers.append(observer)
+    connectivityObservers.append(ConnectivityObserver(underlyingChannel: underlyingChannel, currentState: connectivityState(), callback: callback))
   }
 }
 
@@ -124,15 +124,13 @@ private extension Channel {
     }
 
     deinit {
-      completionQueue.shutdown()
+      shutdown()
     }
 
     private func run() {
       let spinloopThreadQueue = DispatchQueue(label: "SwiftGRPC.ConnectivityObserver.run.spinloopThread")
 
-      spinloopThreadQueue.async { [weak self] in
-        guard let `self` = self else { return }
-
+      spinloopThreadQueue.async {
         while true  {
           guard let underlyingState = self.lastState.underlyingState else { return }
           
@@ -159,6 +157,10 @@ private extension Channel {
         }
       }
     }
+    
+    func shutdown() {
+      completionQueue.shutdown()
+    }
   }
 }