From 0ede979d155983b36e96ed6791f8af1a118c754a Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 27 Dec 2024 13:11:10 +0000 Subject: [PATCH] Fixes for tests with weak pointers in notification observers. --- ChangeLog | 2 ++ Source/NSMessagePort.m | 3 ++- Source/NSObject.m | 4 ++++ Source/NSSocketPort.m | 3 ++- Tests/base/NSConnection/basic.m | 9 +++++---- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index c93137e3d..f8d259abd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,8 +5,10 @@ * Source/GSPrivate.h: * Source/NSConcreteHashTable.m: * Source/NSConcretePointerFunctions.h: + * Source/NSMessagePort.m: * Source/NSNotificationCenter.m: * Source/NSObject.m: + * Source/NSSocketPort.m: * Source/ObjectiveC2/GNUmakefile: * Source/ObjectiveC2/README: * Source/ObjectiveC2/weak.m: diff --git a/Source/NSMessagePort.m b/Source/NSMessagePort.m index e99f28ebd..bc055c25a 100644 --- a/Source/NSMessagePort.m +++ b/Source/NSMessagePort.m @@ -1705,8 +1705,9 @@ typedef struct { { NSMapRemove(messagePortMap, (void*)name); } + [self retain]; M_UNLOCK(messagePortLock); - [self dealloc]; + [super release]; } else { diff --git a/Source/NSObject.m b/Source/NSObject.m index ee22da266..c976a7209 100644 --- a/Source/NSObject.m +++ b/Source/NSObject.m @@ -2486,6 +2486,10 @@ static id gs_weak_load(id obj) } return c; } +- (NSUInteger) retainCount +{ + return 0; // So that gs_weak_load() knows the object was deallocated +} - (void) logZombie: (SEL)selector { GSLogZombie(self, selector); diff --git a/Source/NSSocketPort.m b/Source/NSSocketPort.m index cc36615a2..603637c86 100644 --- a/Source/NSSocketPort.m +++ b/Source/NSSocketPort.m @@ -2474,8 +2474,9 @@ static Class tcpPortClass; { NSMapRemove(thePorts, host); } + [self retain]; M_UNLOCK(tcpPortLock); - [self dealloc]; + [super release]; } else { diff --git a/Tests/base/NSConnection/basic.m b/Tests/base/NSConnection/basic.m index e083ad407..fef4e83b2 100644 --- a/Tests/base/NSConnection/basic.m +++ b/Tests/base/NSConnection/basic.m @@ -6,13 +6,14 @@ int main() { - NSAutoreleasePool *arp = [NSAutoreleasePool new]; - id testObject = nil; + NSAutoreleasePool *arp = [NSAutoreleasePool new]; + id testObject = nil; + test_alloc(@"NSConnection"); testObject = [NSConnection new]; - test_NSObject(@"NSConnection",[NSArray arrayWithObject:testObject]); + test_NSObject(@"NSConnection", [NSArray arrayWithObject: testObject]); testObject = [NSConnection defaultConnection]; - PASS(testObject != nil && [testObject isKindOfClass:[NSConnection class]], + PASS(testObject != nil && [testObject isKindOfClass: [NSConnection class]], "NSConnection +defaultConnection works"); [arp release]; arp = nil;