Minor thread safety fixup

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@25774 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2007-12-21 14:37:37 +00:00
parent d3dbdfe3ac
commit 34dfd629f6
3 changed files with 18 additions and 5 deletions

View file

@ -1,3 +1,7 @@
2007-12-21 Richard Frith-Macdonald <rfm@gnu.org>
* Source/GSLocale.m: protect locale access with locks.
2007-12-21 David Ayers <ayers@fsfe.org>
* Source/NSPathUtilities.m (_POSIX_PTHREAD_SEMANTICS): Define to expose

View file

@ -108,6 +108,11 @@ GSDomainFromDefaultLocale(void)
dict = [NSMutableDictionary dictionary];
/* Protect locale access with locks to prevent multiple threads using
* it and interfering with the buffer.
*/
[gnustep_global_lock lock];
#ifdef HAVE_LANGINFO_H
/* Time/Date Information */
arr = [NSMutableArray arrayWithCapacity: 7];
@ -189,7 +194,6 @@ GSDomainFromDefaultLocale(void)
forKey: NSThousandsSeparator];
}
/* FIXME: Get currency format from localeconv */
#ifdef LC_MESSAGES
@ -207,7 +211,6 @@ GSDomainFromDefaultLocale(void)
[dict setObject: str2 forKey: NSLanguageName];
}
[gnustep_global_lock lock];
/*
* Another thread might have been faster in setting the static variable.
* If so, we just drop our dict.

View file

@ -266,14 +266,20 @@ static BOOL setSharedDefaults = NO; /* Flag to prevent infinite recursion */
{
NSDictionary *regDefs;
[sharedDefaults synchronize]; // Ensure changes are written.
regDefs = RETAIN([sharedDefaults->_tempDomains
objectForKey: NSRegistrationDomain]);
/* To ensure that we don't try to synchronise the old defaults to disk
* after creating the new ones, remove as housekeeping notification
* observer.
*/
[[NSNotificationCenter defaultCenter] removeObserver: sharedDefaults];
/* Ensure changes are written, and no changes left so we can't end up
* writing old changes to the new defaults.
*/
[sharedDefaults synchronize];
DESTROY(sharedDefaults->_changedDomains);
regDefs = RETAIN([sharedDefaults->_tempDomains
objectForKey: NSRegistrationDomain]);
setSharedDefaults = NO;
DESTROY(sharedDefaults);
if (regDefs != nil)