Skip to content

Commit

Permalink
Fix a bug where invoking weaklyReferencedObject on a weak reference w…
Browse files Browse the repository at this point in the history
…ould leak a reference count to the weakly referenced object.
  • Loading branch information
gnachman committed May 31, 2016
1 parent f85effd commit ba2f88f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
12 changes: 12 additions & 0 deletions iTerm2XCTests/iTermWeakReferenceTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@ - (void)testWeaklyReferencedObjectMethodAfterDealloc {
XCTAssertEqual(weakReference.weaklyReferencedObject, nil);
}

- (void)testWeaklyReferencedObjectDoesNotLeak {
iTermWeaklyReferenceableObject *object = [[iTermWeaklyReferenceableObject alloc] init];
iTermWeaklyReferenceableObject<iTermWeakReference> *weakReference = [object weakSelf];

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
XCTAssertEqual(weakReference.weaklyReferencedObject, object);
[object release];
[pool drain];

XCTAssertEqual(weakReference.weaklyReferencedObject, nil);
}

- (void)testTwoWeakRefsToSameObject {
iTermWeaklyReferenceableObject *object = [[iTermWeaklyReferenceableObject alloc] init];
XCTAssert(object.retainCount == 1);
Expand Down
2 changes: 1 addition & 1 deletion sources/iTermWeakReference.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ - (id)weaklyReferencedObject {
id theObject = [_object retain];
OSSpinLockUnlock(&lock);

return [[theObject retain] autorelease];
return [theObject autorelease];
}

#pragma mark - Notifications
Expand Down

0 comments on commit ba2f88f

Please sign in to comment.