Name server minor safety and performance tweak

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@37956 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2014-06-20 14:17:17 +00:00
parent e421465740
commit 8065366cfa
3 changed files with 22 additions and 3 deletions

View file

@ -1,3 +1,12 @@
2014-06-20 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSSocketPortNameServer.m:
* Source/NSMessagePortNameServer.m:
Maps of ports to names modified to treat the ports as non owned
pointers rather than non retained objects ... so we simply do
pointer comparisons (faster and also safer if we are removing
a port which is being deallocated).
2014-06-20 Richard Frith-Macdonald <rfm@gnu.org>
* configure.ac: Temporarily add -O0 to turn off optimisation while

View file

@ -133,8 +133,13 @@ static NSMapTable *portToNamesMap;
NSEnumerator *files;
serverLock = [NSRecursiveLock new];
portToNamesMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks,
NSObjectMapValueCallBacks, 0);
/* Use NSNonOwnedPointerMapKeyCallBacks for the ports used as keys
* since we want as pointer test for equality as we may be doing
* lookup while dealocating the port (in which case the -isEqual:
* method could fail).
*/
portToNamesMap = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSObjectMapValueCallBacks, 0);
[self registerAtExit];
/* It's possible that an old process, with the same process ID as

View file

@ -590,7 +590,12 @@ typedef enum {
}
s = (NSSocketPortNameServer*)NSAllocateObject(self, 0,
NSDefaultMallocZone());
s->_portMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks,
/* Use NSNonOwnedPointerMapKeyCallBacks for the ports used as keys
* since we want as pointer test for equality as we may be doing
* lookup while dealocating the port (in which case the -isEqual:
* method could fail).
*/
s->_portMap = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSObjectMapValueCallBacks, 0);
s->_nameMap = NSCreateMapTable(NSObjectMapKeyCallBacks,
NSNonOwnedPointerMapValueCallBacks, 0);