diff --git a/ChangeLog b/ChangeLog index de851d57c..fa1bcc5f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-03-16 Richard Frith-Macdonald + + * Source/NSThread.m: Make +initialize thread safety warning optional + (disabled using GSSilenceInitializeWarning user default) and more + informative. + 2011-03-15 Richard Frith-Macdonald * Source/NSNumberFormatter.m: Padding for fractional part comes at the diff --git a/Source/NSThread.m b/Source/NSThread.m index 47b03194c..38521aebc 100644 --- a/Source/NSThread.m +++ b/Source/NSThread.m @@ -71,6 +71,7 @@ #import "Foundation/NSRunLoop.h" #import "Foundation/NSConnection.h" #import "Foundation/NSInvocation.h" +#import "Foundation/NSUserDefaults.h" #import "GSPrivate.h" #import "GSRunLoopCtxt.h" @@ -385,7 +386,11 @@ gnustep_base_thread_callback(void) nc = RETAIN([NSNotificationCenter defaultCenter]); } #if !defined(HAVE_INITIALIZE) - NSLog(@"WARNING your program is becoming multi-threaded, but you are using an ObjectiveC runtime library which does not have a thread-safe implementation of the +initialize method. This means that any classes not already used may be incorrectly initialised, potentially causing strange behaviors and crashes. Please build/run GNUstep-base with a runtime which supports the +initialize method."); + if (NO == [[NSUserDefaults standardUserDefaults] + boolForKey: @"GSSilenceInitializeWarning"]) + { + NSLog(@"WARNING your program is becoming multi-threaded, but you are using an ObjectiveC runtime library which does not have a thread-safe implementation of the +initialize method. This means that any classes not already used may be incorrectly initialised, potentially causing strange behaviors and crashes.\nTo put this into context, the runtime bug has been knoown for several years and only rarely causes problems ... the easy workaround being to ensure that any classes used by a new thread have already been used in the main thread before the new thread starts.\nIf you are worried, please build/run GNUstep with a runtime which supports the +initialize method. The GNUstep stable runtime (libobjc) and experimental runtime (libobjc2), available from the GNUstep website and subversion repository, should both work.\nTo disable this warning (eg. for an application which does not suffer any problems caused by this runtime bug), please set the GSSilenceInitializeWarning user default to YES."); + } #endif [nc postNotificationName: NSWillBecomeMultiThreadedNotification object: nil