diff --git a/ChangeLog b/ChangeLog index e268dcc3c..ca28742fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ * Tools/gdnc.m: If given -NSHost specification for the current host, ignore it and use the standard name. + * Source/GSTcpPort.m: ([-invalidate]) call superclass implementation + at end ... so handles can find this port when they are destroying + themselves. Reverses last change I made to this. 2002-04-18 Richard Frith-Macdonald diff --git a/Source/GSTcpPort.m b/Source/GSTcpPort.m index be938950e..f8025dc10 100644 --- a/Source/GSTcpPort.m +++ b/Source/GSTcpPort.m @@ -1769,8 +1769,6 @@ static Class tcpPortClass; NSArray *handleArray; unsigned i; - [super invalidate]; // Avoid recursive calls - [tcpPortLock lock]; thePorts = NSMapGet(tcpPortMap, (void*)(gsaddr)portNum); if (thePorts != 0) @@ -1794,9 +1792,17 @@ static Class tcpPortClass; [handle invalidate]; } - NSFreeMapTable(handles); - handles = 0; + /* + * We permit mutual recursive invalidation, so the handles map + * may already have been destroyed. + */ + if (handles != 0) + { + NSFreeMapTable(handles); + handles = 0; + } } + [super invalidate]; } DO_UNLOCK(myLock); }