From e7767baf50e042a9b10c9c984c40a4e1cbed25af Mon Sep 17 00:00:00 2001 From: theraven Date: Sun, 29 May 2011 13:50:46 +0000 Subject: [PATCH] Don't send retain / release messages in GC mode when copying object pointers into blocks. --- blocks_runtime.m | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/blocks_runtime.m b/blocks_runtime.m index 837c7ad..f60d35b 100644 --- a/blocks_runtime.m +++ b/blocks_runtime.m @@ -363,8 +363,12 @@ void _Block_object_assign(void *destAddr, const void *object, const int flags) { fprintf(stderr, "-retain\n"); id src = (id)object; - id *dst = destAddr; - *dst = [src retain]; + void **dst = destAddr; + *dst = src; + if (!isGCEnabled) + { + *dst = [src retain]; + } } } } @@ -436,7 +440,10 @@ void _Block_object_dispose(const void *object, const int flags) else if((flags & BLOCK_FIELD_IS_OBJECT) == BLOCK_FIELD_IS_OBJECT) { id src = (id)object; - [src release]; + if (!isGCEnabled) + { + [src release]; + } } } }