diff options
Diffstat (limited to 'Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m')
-rw-r--r-- | Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m index 6b6ccc22..1a4786ec 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPConnection.m @@ -660,12 +660,22 @@ void pingConnectionTask(void *ptr) */ - (void)startKeepAliveTimer { + + // Ensure keepalives are started on the main thread, as otherwise thread termination kills the timer + if (![NSThread isMainThread]) { + [self performSelectorOnMainThread:@selector(startKeepAliveTimer) withObject:nil waitUntilDone:NO]; + return; + } + if (keepAliveTimer) [self stopKeepAliveTimer]; if (!mConnected) return; - if (useKeepAlive && keepAliveInterval) { + double interval = keepAliveInterval; + if (interval <= 1) interval = 1.0; + + if (useKeepAlive) { keepAliveTimer = [NSTimer - scheduledTimerWithTimeInterval:keepAliveInterval + scheduledTimerWithTimeInterval:interval target:self selector:@selector(keepAlive:) userInfo:nil |