[MacRuby-devel] [MacRuby] #540: segfault with NSURLDownload with GC on
MacRuby
ruby-noreply at macosforge.org
Mon Jan 4 20:49:34 PST 2010
#540: segfault with NSURLDownload with GC on
-------------------------------------+--------------------------------------
Reporter: mattaimonetti@… | Owner: lsansonetti@…
Type: defect | Status: new
Priority: major | Milestone: MacRuby 0.5
Component: MacRuby | Keywords: NSURLDownload, Cocoa
-------------------------------------+--------------------------------------
Changes (by mattaimonetti@…):
* keywords: => NSURLDownload, Cocoa
* owner: mattaimonetti@… => lsansonetti@…
Old description:
> Script:
> https://gist.github.com/96954a4e59f1293977c0
>
> Backtrace:
> {{{
> Application Specific Information:
> objc_msgSend() selector name: _downloadActive
> objc[74889]: garbage collection is ON
>
> Thread 0 Crashed: Dispatch queue: com.apple.main-thread
> 0 libobjc.A.dylib 0x00007fff8821011c objc_msgSend +
> 40
> 1 com.apple.Foundation 0x00007fff84db156d
> _NSURLDownloadDidReceiveData + 45
> 2 com.apple.CFNetwork 0x00007fff8143b50f
> URLDownload::sendClientDidReceiveData(long, long, long) + 83
> 3 com.apple.CFNetwork 0x00007fff8143cd9c
> ___asyncWrite_block_invoke_4 + 121
> 4 com.apple.CoreFoundation 0x00007fff8060c1b9
> __CFRunLoopDoBlocks + 297
> 5 com.apple.CoreFoundation 0x00007fff805cece6 __CFRunLoopRun
> + 3046
> 6 com.apple.CoreFoundation 0x00007fff805cdc2f
> CFRunLoopRunSpecific + 575
> 7 com.apple.Foundation 0x00007fff84c94a24
> -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270
> 8 com.apple.Foundation 0x00007fff84ce048a
> -[NSRunLoop(NSRunLoop) runUntilDate:] + 78
> 9 ??? 0x00000001011005fc 0 + 4312794620
>
> Thread 1: Dispatch queue: com.apple.libdispatch-manager
> 0 libSystem.B.dylib 0x00007fff8650cbba kevent + 10
> 1 libSystem.B.dylib 0x00007fff8650ea85
> _dispatch_mgr_invoke + 154
> 2 libSystem.B.dylib 0x00007fff8650e75c
> _dispatch_queue_invoke + 185
> 3 libSystem.B.dylib 0x00007fff8650e286
> _dispatch_worker_thread2 + 244
> 4 libSystem.B.dylib 0x00007fff8650dbb8
> _pthread_wqthread + 353
> 5 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
> + 13
>
> Thread 2:
> 0 libSystem.B.dylib 0x00007fff8650d9da
> __workq_kernreturn + 10
> 1 libSystem.B.dylib 0x00007fff8650ddec
> _pthread_wqthread + 917
> 2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
> + 13
>
> Thread 3:
> 0 libSystem.B.dylib 0x00007fff8650d9da
> __workq_kernreturn + 10
> 1 libSystem.B.dylib 0x00007fff8650ddec
> _pthread_wqthread + 917
> 2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
> + 13
>
> Thread 4:
> 0 libSystem.B.dylib 0x00007fff864f3e3a mach_msg_trap
> + 10
> 1 libSystem.B.dylib 0x00007fff864f44ad mach_msg + 59
> 2 com.apple.CoreFoundation 0x00007fff805ce7a2 __CFRunLoopRun
> + 1698
> 3 com.apple.CoreFoundation 0x00007fff805cdc2f
> CFRunLoopRunSpecific + 575
> 4 com.apple.Foundation 0x00007fff84cd94cf
> +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] +
> 297
> 5 com.apple.Foundation 0x00007fff84c59e99
> __NSThread__main__ + 1429
> 6 libSystem.B.dylib 0x00007fff8652cf8e _pthread_start
> + 331
> 7 libSystem.B.dylib 0x00007fff8652ce41 thread_start +
> 13
>
> Thread 5:
> 0 libSystem.B.dylib 0x00007fff8650d9da
> __workq_kernreturn + 10
> 1 libSystem.B.dylib 0x00007fff8650ddec
> _pthread_wqthread + 917
> 2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
> + 13
>
> Thread 6:
> 0 libSystem.B.dylib 0x00007fff865379e2
> select$DARWIN_EXTSN + 10
> 1 com.apple.CoreFoundation 0x00007fff805f0242
> __CFSocketManager + 818
> 2 libSystem.B.dylib 0x00007fff8652cf8e _pthread_start
> + 331
> 3 libSystem.B.dylib 0x00007fff8652ce41 thread_start +
> 13
> }}}
>
> works fine with GC_DISABLE=1
>
> ---
>
> TODO: Rewrite the script in pure objc, compile with -fobjc-gc and see if
> it's a MacRuby bug or a Cocoa bug.
New description:
Script:
https://gist.github.com/96954a4e59f1293977c0
Backtrace:
{{{
Application Specific Information:
objc_msgSend() selector name: _downloadActive
objc[74889]: garbage collection is ON
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff8821011c objc_msgSend +
40
1 com.apple.Foundation 0x00007fff84db156d
_NSURLDownloadDidReceiveData + 45
2 com.apple.CFNetwork 0x00007fff8143b50f
URLDownload::sendClientDidReceiveData(long, long, long) + 83
3 com.apple.CFNetwork 0x00007fff8143cd9c
___asyncWrite_block_invoke_4 + 121
4 com.apple.CoreFoundation 0x00007fff8060c1b9
__CFRunLoopDoBlocks + 297
5 com.apple.CoreFoundation 0x00007fff805cece6 __CFRunLoopRun
+ 3046
6 com.apple.CoreFoundation 0x00007fff805cdc2f
CFRunLoopRunSpecific + 575
7 com.apple.Foundation 0x00007fff84c94a24
-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270
8 com.apple.Foundation 0x00007fff84ce048a
-[NSRunLoop(NSRunLoop) runUntilDate:] + 78
9 ??? 0x00000001011005fc 0 + 4312794620
Thread 1: Dispatch queue: com.apple.libdispatch-manager
0 libSystem.B.dylib 0x00007fff8650cbba kevent + 10
1 libSystem.B.dylib 0x00007fff8650ea85
_dispatch_mgr_invoke + 154
2 libSystem.B.dylib 0x00007fff8650e75c
_dispatch_queue_invoke + 185
3 libSystem.B.dylib 0x00007fff8650e286
_dispatch_worker_thread2 + 244
4 libSystem.B.dylib 0x00007fff8650dbb8
_pthread_wqthread + 353
5 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
+ 13
Thread 2:
0 libSystem.B.dylib 0x00007fff8650d9da
__workq_kernreturn + 10
1 libSystem.B.dylib 0x00007fff8650ddec
_pthread_wqthread + 917
2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
+ 13
Thread 3:
0 libSystem.B.dylib 0x00007fff8650d9da
__workq_kernreturn + 10
1 libSystem.B.dylib 0x00007fff8650ddec
_pthread_wqthread + 917
2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
+ 13
Thread 4:
0 libSystem.B.dylib 0x00007fff864f3e3a mach_msg_trap +
10
1 libSystem.B.dylib 0x00007fff864f44ad mach_msg + 59
2 com.apple.CoreFoundation 0x00007fff805ce7a2 __CFRunLoopRun
+ 1698
3 com.apple.CoreFoundation 0x00007fff805cdc2f
CFRunLoopRunSpecific + 575
4 com.apple.Foundation 0x00007fff84cd94cf
+[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 297
5 com.apple.Foundation 0x00007fff84c59e99
__NSThread__main__ + 1429
6 libSystem.B.dylib 0x00007fff8652cf8e _pthread_start
+ 331
7 libSystem.B.dylib 0x00007fff8652ce41 thread_start +
13
Thread 5:
0 libSystem.B.dylib 0x00007fff8650d9da
__workq_kernreturn + 10
1 libSystem.B.dylib 0x00007fff8650ddec
_pthread_wqthread + 917
2 libSystem.B.dylib 0x00007fff8650da55 start_wqthread
+ 13
Thread 6:
0 libSystem.B.dylib 0x00007fff865379e2
select$DARWIN_EXTSN + 10
1 com.apple.CoreFoundation 0x00007fff805f0242
__CFSocketManager + 818
2 libSystem.B.dylib 0x00007fff8652cf8e _pthread_start
+ 331
3 libSystem.B.dylib 0x00007fff8652ce41 thread_start +
13
}}}
works fine with GC_DISABLE=1
---
TODO: Rewrite the script in pure objc, compile with -fobjc-gc and see if
it's a MacRuby bug or a Cocoa bug.
--
Comment:
ported to obj-c and everything works fine even with the GC on:
{{{
#import <Foundation/Foundation.h>
@interface Test : NSObject
@end
@implementation Test
-(void)startDownload{
NSString *url_string = @"http://macruby.icoretech.org/latest";
NSURL *url = [NSURL URLWithString: url_string];
NSURLRequest *req = [NSURLRequest requestWithURL: url];
[[NSURLDownload alloc] initWithRequest: req delegate: self];
}
- (void)downloadDidFinish:(NSURLDownload *)download
{
NSLog(@"Download finished!");
exit(0);
}
@end
int main (void) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[Test alloc] startDownload];
NSLog(@"Hello, Laurent");
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate distantFuture]];
[pool drain];
return 0;
}
}}}
Note that the MacRuby script works fine on small files but seems to fail
on big files (at least the latest pkg)
--
Ticket URL: <http://www.macruby.org/trac/ticket/540#comment:1>
MacRuby <http://macruby.org/>
More information about the MacRuby-devel
mailing list