Fix a memory management issue with blocks.

Patch by Jens Alfke!
main
theraven 14 years ago
parent 5aec1ee728
commit 0f7cc4716a

@ -203,7 +203,7 @@ void _Block_object_dispose(const void *object, const int flags)
int refcount = (src->flags & BLOCK_REFCOUNT_MASK) == 0 ? 0 : decrement24(&src->flags); int refcount = (src->flags & BLOCK_REFCOUNT_MASK) == 0 ? 0 : decrement24(&src->flags);
if (refcount == 0) if (refcount == 0)
{ {
if (0 != src->byref_dispose) if(IS_SET(src->flags, BLOCK_HAS_COPY_DISPOSE) && (0 != src->byref_dispose))
{ {
src->byref_dispose(src); src->byref_dispose(src);
} }
@ -212,8 +212,8 @@ void _Block_object_dispose(const void *object, const int flags)
} }
else else
{ {
// Call nontrivial destructors, but don't // Call nontrivial destructors, but don't free the storage
if (IS_SET(src->flags, BLOCK_HAS_COPY_DISPOSE)) if(IS_SET(src->flags, BLOCK_HAS_COPY_DISPOSE) && (0 != src->byref_dispose))
{ {
src->byref_dispose(src); src->byref_dispose(src);
} }

Loading…
Cancel
Save