KVO tweaks

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32443 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2011-03-03 17:33:57 +00:00
parent e0a2640d15
commit 6afda2b67a
3 changed files with 24 additions and 13 deletions

View file

@ -1,3 +1,8 @@
2011-03-03 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSKeyValueObserving.m: Fix possible thread race condition.
* Source/ObjectiveC2/runtime.c: Fix bogus warning messages.
2011-03-03 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSOperation.m: re-introduce per-queue thread pool.

View file

@ -77,19 +77,25 @@ static NSMapTable *dependentKeyTable;
static Class baseClass;
static id null;
static inline void setup()
static inline void
setup()
{
if (kvoLock == nil)
if (nil == kvoLock)
{
kvoLock = [GSLazyRecursiveLock new];
null = [[NSNull null] retain];
classTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSNonOwnedPointerMapValueCallBacks, 128);
infoTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSNonOwnedPointerMapValueCallBacks, 1024);
dependentKeyTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSOwnedPointerMapValueCallBacks, 128);
baseClass = NSClassFromString(@"GSKVOBase");
[gnustep_global_lock lock];
if (nil == kvoLock)
{
kvoLock = [GSLazyRecursiveLock new];
null = [[NSNull null] retain];
classTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSNonOwnedPointerMapValueCallBacks, 128);
infoTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSNonOwnedPointerMapValueCallBacks, 1024);
dependentKeyTable = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
NSOwnedPointerMapValueCallBacks, 128);
baseClass = NSClassFromString(@"GSKVOBase");
}
[gnustep_global_lock unlock];
}
}
/*
@ -373,7 +379,6 @@ replacementForClass(Class c)
GSKVOReplacement *r;
setup();
[kvoLock lock];
r = (GSKVOReplacement*)NSMapGet(classTable, (void*)c);
if (r == nil)

View file

@ -1057,11 +1057,12 @@ objc_registerClassPair(Class cls)
{
return; // Already registered
}
if (Nil == existing)
else if (Nil != existing)
{
fprintf(stderr, "*** ERROR *** function objc_registerClassPair() called "
"for class pair with name ('%s') of existing class.\n",
class_getName(cls));
return;
}
// Initialize the dispatch table for the class and metaclass.