首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SocketRocket RunLoop零星崩溃

SocketRocket RunLoop零星崩溃
EN

Stack Overflow用户
提问于 2014-03-07 16:27:37
回答 2查看 1.1K关注 0票数 3

因此,我们的应用程序在SocketRocket中已经崩溃一段时间了。我们每天从它得到大约20次崩溃,具有以下堆栈跟踪:

代码语言:javascript
复制
Crashed: com.apple.root.default-overcommit-priority
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000c 

Thread : Crashed: com.apple.root.default-overcommit-priority
0  libsystem_platform.dylib       0x3b8ff816 spin_lock$VARIANT$mp + 1
1  CoreFoundation                 0x30e2d593 CFSocketEnableCallBacks + 54
2  CFNetwork                      0x30a926f9 SocketStream::securityBufferedRead_NoLock() + 212
3  CFNetwork                      0x30a925f5 SocketStream::socketCallbackReadLocked(SocketStreamSignalHolder*) + 76
4  CFNetwork                      0x30a90d8f SocketStream::socketCallback(__CFSocket*, unsigned long, __CFData const*, void const*) + 102
5  CFNetwork                      0x30a90cf3 SocketStream::_SocketCallBack_stream(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 58
6  CoreFoundation                 0x30e6a337 __CFSocketPerformV0 + 578
7  CoreFoundation                 0x30e68183 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
8  CoreFoundation                 0x30e67653 __CFRunLoopDoSources0 + 206
9  CoreFoundation                 0x30e65e47 __CFRunLoopRun + 622
10 CoreFoundation                 0x30dd0c27 CFRunLoopRunSpecific + 522
11 CoreFoundation                 0x30dd0a0b CFRunLoopRunInMode + 106
12 Foundation                     0x317be3db -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 254
13 Piazza                         0x00110b7b -[_SRRunLoopThread main]
14 Foundation                     0x31880c87 __NSThread__main__ + 1062
15 libsystem_pthread.dylib        0x3b904c1d _pthread_body + 140
16 libsystem_pthread.dylib        0x3b904b8f _pthread_start + 102

我已经尝试了20多个小时了。这是非常零星的--我有的最好的复制方法是注销,这样所有的连接都会失败,然后尝试激发一些连接,和/或等待几分钟。工作大约1/4的时间,在几分钟后。但是,仍有用户在登录时遇到这种崩溃的日志。

至于代码,我不知道是什么导致了EXC_BAD_ACCESS,因为上面的13个条目都没有可用的源代码,并且查看汇编代码并没有真正启发我-我所发现的是ecx在执行过程中被设置为0xc,然后spin_lock$VARIANT$mp试图用一些寄存器来交换位于($ecx)的东西,然后它崩溃了。[_SRRunLoopThread main]是我有源代码的堆栈跟踪的唯一部分,如下所示:

代码语言:javascript
复制
- (void)main;
{
    @autoreleasepool {
        _runLoop = [NSRunLoop currentRunLoop];
        dispatch_group_leave(_waitGroup);

        NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture] interval:0.0 target:nil selector:nil userInfo:nil repeats:NO];
        [_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];

        int i = 0;

        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
        }
        assert(NO);
    }
}

它在while线路上崩溃。我怀疑某些东西,在它应该被释放之前,在某个地方被释放了,但我不确定它是一个SRWebSocket,还是以某种方式被添加到run循环中的一个块,或者什么。我对run循环并不完全熟悉。

我几乎没有什么好做的事情来解决这个问题,而且我几乎没有取得任何进展。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2014-04-10 12:37:38

我也遇到过类似的问题。这可能是因为对象在回调发生之前就被释放了。

因此,在dealloc方法中关闭流可能是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2015-05-08 07:34:23

我在MixPanel中看到了同样的问题,它看起来是基于这个源代码。假设我对ABI的理解是正确的,传递给CFSocketEnableCallbacks的CFSocketRef值是NULL,因此为read回调(1)启用它将失败。我不能告诉你为什么使用空套接字调用CFSocketEnableCallbacks,但这看起来就是这样发生的。也许这是一个归零的弱引用问题。当我知道更多信息时,我会更新这篇文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22245057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档