Snow Leopard サーバーで数日から数週間実行されるアプリケーションがあります。10秒間-[NSRunLoop runUntilDate:]
「一時停止」し、タスクを実行してから再び一時停止します。1 時間以上実行した後、アプリがクラッシュし、次のレポートが表示されます。
クラッシュレポート
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000013
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
objc_msgSend() selector name: release
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff84cfef0c objc_msgSend + 40
1 com.apple.CoreFoundation 0x00007fff84e363d1 __CFRunLoopDoSources0 + 1361
2 com.apple.CoreFoundation 0x00007fff84e345c9 __CFRunLoopRun + 873
3 com.apple.CoreFoundation 0x00007fff84e33d8f CFRunLoopRunSpecific + 575
4 com.apple.Foundation 0x00007fff83e73b74 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270
5 com.apple.Foundation 0x00007fff83ebf19a -[NSRunLoop(NSRunLoop) runUntilDate:] + 78
一見したところ、NSRunLoop
オブジェクトが有効ではなくなっているため、release
CF の奥深くにあるメッセージがクラッシュを引き起こしていると思いました。currentRunLoop
ただし、前の行でオブジェクトへの参照を取得しているため、そうではないと思います。
クラッシュ時間は 1 時間から 1.5 時間の間で変動しますが、何が原因なのかはわかりません。次に何をすべきかわからないので、コメントや意見、デバッグのアイデアをいただければ幸いです。
編集:問題解決 - 以下の私の答えを見てください