Author: rfm Date: Tue Jul 26 10:20:09 2016 New Revision: 40033 URL: http://svn.gna.org/viewcvs/gnustep?rev=40033&view=rev Log: Thread deadlock fixup
Modified: libs/base/trunk/ChangeLog libs/base/trunk/Source/Additions/GSMime.m libs/base/trunk/Source/Additions/NSObject+GNUstepBase.m Modified: libs/base/trunk/ChangeLog URL: http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=40033&r1=40032&r2=40033&view=diff ============================================================================== --- libs/base/trunk/ChangeLog (original) +++ libs/base/trunk/ChangeLog Tue Jul 26 10:20:09 2016 @@ -1,3 +1,9 @@ +2016-07-26 Richard Frith-Macdonald <r...@gnu.org> + + * Source/Additions/NSObject+GNUstepbase.m: use separate lock to + protect at exit methods ... avoid conflict/deadlock with multithreaded + notification change. + 2016-07-18 Larry Campbell <lcamp...@akamai.com> * Source/NSThread.m: Send notification about becoming multithreaded Modified: libs/base/trunk/Source/Additions/GSMime.m URL: http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/Additions/GSMime.m?rev=40033&r1=40032&r2=40033&view=diff ============================================================================== --- libs/base/trunk/Source/Additions/GSMime.m (original) +++ libs/base/trunk/Source/Additions/GSMime.m Tue Jul 26 10:20:09 2016 @@ -123,6 +123,7 @@ static Class headerClass = 0; static BOOL oldStyleFolding = NO; +static NSString *text7bitEncoding = @"quoted-printable"; typedef BOOL (*boolIMP)(id, SEL, id); @@ -4500,6 +4501,14 @@ */ @implementation GSMimeDocument ++ (void) setText7bitBase64: (BOOL)aFlag +{ + if (YES == aFlag) + text7bitEncoding = @"base64"; + else + text7bitEncoding = @"quoted-printable"; +} + /* * Examine xml data to find out the characterset needed to convert from * binary data to an NSString object. @@ -5776,7 +5785,7 @@ if (e != NSASCIIStringEncoding && e != NSUTF7StringEncoding) #endif { - v = @"quoted-printable"; + v = text7bitEncoding; } else { @@ -6686,7 +6695,7 @@ */ if (YES == want7Bit) { - encoding = @"quoted-printable"; + encoding = text7bitEncoding; } enc = [self setHeader: @"Content-Transfer-Encoding" value: encoding Modified: libs/base/trunk/Source/Additions/NSObject+GNUstepBase.m URL: http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/Additions/NSObject%2BGNUstepBase.m?rev=40033&r1=40032&r2=40033&view=diff ============================================================================== --- libs/base/trunk/Source/Additions/NSObject+GNUstepBase.m (original) +++ libs/base/trunk/Source/Additions/NSObject+GNUstepBase.m Tue Jul 26 10:20:09 2016 @@ -145,6 +145,20 @@ static struct exitLink *exited = 0; static BOOL enabled = NO; static BOOL shouldCleanUp = NO; +static NSLock *exitLock = nil; + +static inline void setup() +{ + if (nil == exitLock) + { + [gnustep_global_lock lock]; + if (nil == exitLock) + { + exitLock = [NSLock new]; + } + [gnustep_global_lock unlock]; + } +} static void handleExit() @@ -197,10 +211,11 @@ l->at = anAddress; l->obj = [*anAddress retain]; l->sel = 0; - [gnustep_global_lock lock]; + setup(); + [exitLock lock]; l->next = exited; exited = l; - [gnustep_global_lock unlock]; + [exitLock unlock]; return l->obj; } @@ -212,10 +227,11 @@ l->at = 0; l->obj = [anObject retain]; l->sel = 0; - [gnustep_global_lock lock]; + setup(); + [exitLock lock]; l->next = exited; exited = l; - [gnustep_global_lock unlock]; + [exitLock unlock]; return l->obj; } @@ -247,12 +263,13 @@ return NO; // method not implemented in this class } - [gnustep_global_lock lock]; + setup(); + [exitLock lock]; for (l = exited; l != 0; l = l->next) { if (l->obj == self && sel_isEqual(l->sel, sel)) { - [gnustep_global_lock unlock]; + [exitLock unlock]; return NO; // Already registered } } @@ -267,7 +284,7 @@ atexit(handleExit); enabled = YES; } - [gnustep_global_lock unlock]; + [exitLock unlock]; return YES; } @@ -275,13 +292,14 @@ { if (YES == aFlag) { - [gnustep_global_lock lock]; + setup(); + [exitLock lock]; if (NO == enabled) { atexit(handleExit); enabled = YES; } - [gnustep_global_lock unlock]; + [exitLock unlock]; shouldCleanUp = YES; } else _______________________________________________ Gnustep-cvs mailing list Gnustep-cvs@gna.org https://mail.gna.org/listinfo/gnustep-cvs