Merge pull request #141 from gnustep/fix-nsmaptable-replace-value

Fix replacing existing value in a weak objects map table
This commit is contained in:
Fred Kiefer 2020-06-05 14:12:29 +02:00 committed by GitHub
commit fbcd3508c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2020-06-05 Frederik Seiffert <frederik@algoriddim.com>
* Tests/base/NSMapTable/weakObjects.m,
* Source/NSConcreteMapTable.m:
Add test for and fix replacing an existing value in a weak objects map
table.
2020-05-25 Frederik Seiffert <frederik@algoriddim.com>
* Source/NSUserDefaults.m:

View file

@ -1392,7 +1392,7 @@ const NSMapTableValueCallBacks NSOwnedPointerMapValueCallBacks =
if (GSI_MAP_READ_VALUE(self, &node->value).obj != anObject)
{
GSI_MAP_RELEASE_VAL(self, node->value);
node->value.obj = anObject;
GSI_MAP_WRITE_VAL(self, &node->value, (GSIMapVal)anObject);
GSI_MAP_RETAIN_VAL(self, node->value);
version++;
}

View file

@ -19,9 +19,14 @@ int main()
NSAutoreleasePool *arp2 = [NSAutoreleasePool new];
id testObj = [[[NSObject alloc] init] autorelease];
[mapTable setObject:testObj forKey:@"test"];
PASS([mapTable objectForKey:@"test"] != nil, "Table retains active weak reference");
id testObj1 = [[[NSObject alloc] init] autorelease];
id testObj2 = [[[NSObject alloc] init] autorelease];
[mapTable setObject:testObj1 forKey:@"test"];
PASS([mapTable objectForKey:@"test"] == testObj1, "Table retains first active weak reference");
[mapTable setObject:testObj2 forKey:@"test"];
PASS([mapTable objectForKey:@"test"] == testObj2, "Table retains second active weak reference");
[arp2 release]; arp2 = nil;