From 637e0bb14c3d25d5b64a7471056f1d98df7aa56b Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 27 Jul 2016 21:16:48 -0400 Subject: [PATCH] Fix socketpollable crashing --- Source/SocketEngine.swift | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Source/SocketEngine.swift b/Source/SocketEngine.swift index 8630529..40e20d3 100644 --- a/Source/SocketEngine.swift +++ b/Source/SocketEngine.swift @@ -24,7 +24,7 @@ import Foundation -public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWebsocket { +public final class SocketEngine : NSObject, NSURLSessionDelegate, SocketEnginePollable, SocketEngineWebsocket { public let emitQueue = dispatch_queue_create("com.socketio.engineEmitQueue", DISPATCH_QUEUE_SERIAL) public let handleQueue = dispatch_queue_create("com.socketio.engineHandleQueue", DISPATCH_QUEUE_SERIAL) public let parseQueue = dispatch_queue_create("com.socketio.engineParseQueue", DISPATCH_QUEUE_SERIAL) @@ -117,6 +117,8 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe super.init() + sessionDelegate = sessionDelegate ?? self + (urlPolling, urlWebSocket) = createURLs() } @@ -205,9 +207,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } } - dispatch_async(emitQueue) { - self.doLongPoll(reqPolling) - } + doLongPoll(reqPolling) } private func createURLs() -> (NSURL, NSURL) { @@ -456,7 +456,7 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe invalidated = false session = NSURLSession(configuration: .defaultSessionConfiguration(), delegate: sessionDelegate, - delegateQueue: NSOperationQueue()) + delegateQueue: NSOperationQueue.mainQueue()) sid = "" waitingForPoll = false waitingForPost = false @@ -549,3 +549,11 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } } } + +extension SocketEngine { + public func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) { + DefaultSocketLogger.Logger.error("Engine URLSession became invalid", type: "SocketEngine") + + didError("Engine URLSession became invalid") + } +}