mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
locking and 64bit cpu encoding fixes.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@23329 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f77bfe6fd7
commit
0556f783f7
5 changed files with 22 additions and 11 deletions
|
@ -2,6 +2,12 @@
|
||||||
|
|
||||||
* Source/NSScanner.m: initialisation fix pointed out by David Ayer
|
* Source/NSScanner.m: initialisation fix pointed out by David Ayer
|
||||||
* Source/NSBundle.m: fix for getting class from gnustep bundle
|
* Source/NSBundle.m: fix for getting class from gnustep bundle
|
||||||
|
* Source/NSConnection.m: thread deadlock fix based on probelm and
|
||||||
|
solution supplied by Wim Oudshoorn
|
||||||
|
* Source/NSArchiver.m:
|
||||||
|
* Source/NSKeyedArchiver.m:
|
||||||
|
* Source/NSPortCoder.m: Fix possible problem on 64bit CPUs reported
|
||||||
|
by Wim.
|
||||||
|
|
||||||
2006-08-16 Richard Frith-Macdonald <rfm@gnu.org>
|
2006-08-16 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||||
#define GSI_MAP_HASH(M, X) ((X).uint)
|
#define GSI_MAP_HASH(M, X) ((X).uint)
|
||||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).uint == (Y).uint)
|
#define GSI_MAP_EQUAL(M, X,Y) ((X).ptr == (Y).ptr)
|
||||||
#define GSI_MAP_NOCLEAN 1
|
#define GSI_MAP_NOCLEAN 1
|
||||||
|
|
||||||
#include "GNUstepBase/GSIMap.h"
|
#include "GNUstepBase/GSIMap.h"
|
||||||
|
|
|
@ -3613,23 +3613,28 @@ static void callEncoder (DOContext *ctxt)
|
||||||
*/
|
*/
|
||||||
+ (void) _threadWillExit: (NSNotification*)notification
|
+ (void) _threadWillExit: (NSNotification*)notification
|
||||||
{
|
{
|
||||||
NSRunLoop *runLoop = GSRunLoopForThread([notification object]);
|
NSRunLoop *runLoop = GSRunLoopForThread ([notification object]);
|
||||||
|
|
||||||
if (runLoop != nil)
|
if (runLoop != nil)
|
||||||
{
|
{
|
||||||
NSHashEnumerator enumerator;
|
NSEnumerator *enumerator;
|
||||||
NSConnection *c;
|
NSConnection *c;
|
||||||
|
|
||||||
M_LOCK(connection_table_gate);
|
M_LOCK (connection_table_gate);
|
||||||
enumerator = NSEnumerateHashTable(connection_table);
|
enumerator = [NSAllHashTableObjects(connection_table) objectEnumerator];
|
||||||
while ((c = (NSConnection*)NSNextHashEnumeratorItem(&enumerator)) != nil)
|
M_UNLOCK (connection_table_gate);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We enumerate an array copy of the contents of the hash table
|
||||||
|
* as we know we can do that safely outside the locked region.
|
||||||
|
* The temporary array and the enumerator are autoreleased and
|
||||||
|
* will be deallocated with the threads autorelease pool.
|
||||||
|
*/
|
||||||
|
while ((c = [enumerator nextObject]) != nil)
|
||||||
{
|
{
|
||||||
[c removeRunLoop: runLoop];
|
[c removeRunLoop: runLoop];
|
||||||
}
|
}
|
||||||
NSEndHashTableEnumeration(&enumerator);
|
|
||||||
M_UNLOCK(connection_table_gate);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||||
#define GSI_MAP_HASH(M, X) ((X).uint)
|
#define GSI_MAP_HASH(M, X) ((X).uint)
|
||||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).uint == (Y).uint)
|
#define GSI_MAP_EQUAL(M, X,Y) ((X).ptr == (Y).ptr)
|
||||||
#undef GSI_MAP_NOCLEAN
|
#undef GSI_MAP_NOCLEAN
|
||||||
|
|
||||||
#include "GNUstepBase/GSIMap.h"
|
#include "GNUstepBase/GSIMap.h"
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||||
#define GSI_MAP_HASH(M, X) ((X).uint)
|
#define GSI_MAP_HASH(M, X) ((X).uint)
|
||||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).uint == (Y).uint)
|
#define GSI_MAP_EQUAL(M, X,Y) ((X).ptr == (Y).ptr)
|
||||||
#define GSI_MAP_NOCLEAN 1
|
#define GSI_MAP_NOCLEAN 1
|
||||||
|
|
||||||
#include "GNUstepBase/GSIMap.h"
|
#include "GNUstepBase/GSIMap.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue