mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 09:04:13 +00:00
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:
commit
fbcd3508c9
3 changed files with 16 additions and 4 deletions
|
@ -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:
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue