Hi Guys,

Was tracking a memory leak in an existing app and tracked it down to
objc_setassociatedobject not working as expected from the code being
developed for the Apple Runtime.  The docs around objc_setassociatedobject
seem to imply it follows the Apple Runtime but this simple gtest will pass
on Apple but fail on libobjc/GNUStep Base:

static BOOL deallocCalled = NO;
static const char* objc_setAssociatedObjectKey =
"objc_setAssociatedObjectKey";

@interface NSMutableDictionary(setAssociatedObjectTest)
@end

@implementation NSMutableDictionary(setAssociatedObjectTest)

-(void) dealloc
{
    deallocCalled = YES;
    [super dealloc];
}

@end

TEST(objc_setAssociatedObject, AssociatedObjectsAreReleased)
{
    @autoreleasepool {
        NSObject* object = [[NSString alloc] init];

        NSMutableDictionary *info = [NSMutableDictionary
dictionaryWithCapacity:1];
        objc_setAssociatedObject(object, &objc_setAssociatedObjectKey,
info, OBJC_ASSOCIATION_RETAIN);

        [object release];
    }

    ASSERT_TRUE(deallocCalled);
}

Adding calls to GSDebugAllocationList before/after the autorelease pool:
1 NSDataMalloc
1 GSMutableDictionary

Shows that the dictionary leaks.

Any thoughts?
_______________________________________________
Gnustep-dev mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to