After some sleep, it's clear that example was pretty dumb.  I think I have a
better one, that *should* work (and does on OS X), but segfaults on Linux.


OS X:


2011-06-28 12:31:09.512 a.out[17451:903] a: x = test string
2011-06-28 12:31:09.514 a.out[17451:903] b: x = test string
2011-06-28 12:31:09.514 a.out[17451:903] -1-
2011-06-28 12:31:09.515 a.out[17451:903] -2-
2011-06-28 12:31:09.516 a.out[17451:903] -3-
2011-06-28 12:31:09.516 a.out[17451:903] -4-


Linux:


2011-06-28 12:31:29.527 a.out[25272] a: x = test string
2011-06-28 12:31:29.529 a.out[25272] b: x = test string
2011-06-28 12:31:29.529 a.out[25272] -1-
2011-06-28 12:31:29.529 a.out[25272] -2-
Segmentation fault


the code below.  two blocks both reference the same __block variable, which
is declared inside yet another block.  runs fine, but crashes on teardown. 
Apologies if this is the wrong place to post this - if so is there a better
place?


int main(int argc, char *argv[])
{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        
        void (^master)(VoidBlock*, VoidBlock*) = Block_copy(^(VoidBlock *a_out,
VoidBlock *b_out) {

                __block id x = nil;
                
                *a_out = Block_copy(^{
                        x = [[NSString stringWithString:@"test string"] retain];
                        NSLog(@"a: x = %@", x);
                });

                *b_out = Block_copy(^{
                        NSLog(@"b: x = %@", x);
                        [x release];
                });
        });
        
        VoidBlock a;
        VoidBlock b;
        master(&a, &b);
        a();
        b();
        NSLog(@"-1-");
        Block_release(a);
        NSLog(@"-2-");
        Block_release(b);
        NSLog(@"-3-");
        Block_release(master);
        NSLog(@"-4-");
        
        [pool drain];
        
        return 0;
}


-- 
View this message in context: 
http://old.nabble.com/_Block_object_assign-crash-tp31942617p31948008.html
Sent from the GNUstep - Dev mailing list archive at Nabble.com.
_______________________________________________
Gnustep-dev mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to