Explorar o código

Use weak/strong capture when closing the socket.

Nikita Lutsenko %!s(int64=2) %!d(string=hai) anos
pai
achega
a5acaf5e3a
Modificáronse 1 ficheiros con 10 adicións e 5 borrados
  1. 10 5
      SocketRocket/SRWebSocket.m

+ 10 - 5
SocketRocket/SRWebSocket.m

@@ -499,19 +499,24 @@ NSString *const SRHTTPResponseErrorKey = @"HTTPResponseStatusCode";
 - (void)closeWithCode:(NSInteger)code reason:(NSString *)reason
 - (void)closeWithCode:(NSInteger)code reason:(NSString *)reason
 {
 {
     assert(code);
     assert(code);
+    __weak typeof(self) wself = self;
     dispatch_async(_workQueue, ^{
     dispatch_async(_workQueue, ^{
-        if (self.readyState == SR_CLOSING || self.readyState == SR_CLOSED) {
+        __strong SRWebSocket *sself = wself;
+        if (!sself) {
+          return;
+        }
+        if (sself.readyState == SR_CLOSING || sself.readyState == SR_CLOSED) {
             return;
             return;
         }
         }
 
 
-        BOOL wasConnecting = self.readyState == SR_CONNECTING;
+        BOOL wasConnecting = sself.readyState == SR_CONNECTING;
 
 
-        self.readyState = SR_CLOSING;
+        sself.readyState = SR_CLOSING;
 
 
         SRDebugLog(@"Closing with code %d reason %@", code, reason);
         SRDebugLog(@"Closing with code %d reason %@", code, reason);
 
 
         if (wasConnecting) {
         if (wasConnecting) {
-            [self closeConnection];
+            [sself closeConnection];
             return;
             return;
         }
         }
 
 
@@ -538,7 +543,7 @@ NSString *const SRHTTPResponseErrorKey = @"HTTPResponseStatusCode";
         }
         }
 
 
 
 
-        [self _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];
+        [sself _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];
     });
     });
 }
 }