Hello Richard,
I stumbled over two double checked locking issues that should be fixed.
NSFileManager.m and GSLocal.m
Cheers,
Dave
Index: core/base/Source/GSLocale.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/GSLocale.m,v
retrieving revision 1.11
diff -u -r1.11 GSLocale.m
--- core/base/Source/GSLocale.m 20 Jun 2002 02:41:26 -0000 1.11
+++ core/base/Source/GSLocale.m 10 Sep 2002 21:33:32 -0000
@@ -196,7 +196,12 @@
}
[gnustep_global_lock lock];
- saved = [dict mutableCopy];
+ /* Another thread might have been faster in setting the static variable.
+ If so, we just drop our dict. */
+ if (saved == nil)
+ {
+ saved = [dict mutableCopy];
+ }
[gnustep_global_lock unlock];
return saved;
#else /* HAVE_LANGINFO_H */
Index: core/base/Source/NSFileManager.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/NSFileManager.m,v
retrieving revision 1.76
diff -u -r1.76 NSFileManager.m
--- core/base/Source/NSFileManager.m 22 Aug 2002 07:22:36 -0000 1.76
+++ core/base/Source/NSFileManager.m 10 Sep 2002 21:33:34 -0000
@@ -194,7 +194,10 @@
NS_DURING
{
[gnustep_global_lock lock];
- defaultManager = [[self alloc] init];
+ if (!defaultManager)
+ {
+ defaultManager = [[self alloc] init];
+ }
[gnustep_global_lock unlock];
}
NS_HANDLER