mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Fix deadlock and revert previous change
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@26603 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
cceb2a06c3
commit
d8a3ed9cba
7 changed files with 43 additions and 25 deletions
|
@ -1,13 +1,7 @@
|
|||
2008-06-07 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSCalendarDate.m:
|
||||
* Source/NSUserDefaults.m:
|
||||
* Source/GSPrivate.h:
|
||||
* Source/NSString.m:
|
||||
* Source/NSDecimalNumber.m:
|
||||
* Source/NSDate.m:
|
||||
Remove GSPrivateDefaultLocale(), as the performance optimisation
|
||||
doesn't seem worth the additional complexity.
|
||||
Fix possible deadlock reported by Larry Campbell
|
||||
|
||||
2008-06-06 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
|
|
|
@ -318,6 +318,12 @@ GSPrivateCheckTasks(void) GS_ATTRIB_PRIVATE;
|
|||
NSStringEncoding
|
||||
GSPrivateDefaultCStringEncoding() GS_ATTRIB_PRIVATE;
|
||||
|
||||
/* Get default locale quickly (usually from cache).
|
||||
* External apps would cache the locale themselves.
|
||||
*/
|
||||
NSDictionary *
|
||||
GSPrivateDefaultLocale() GS_ATTRIB_PRIVATE;
|
||||
|
||||
/* Get one of several standard values.
|
||||
*/
|
||||
BOOL
|
||||
|
|
|
@ -673,7 +673,7 @@ static inline int getDigits(const char *from, char *to, int limit, BOOL *error)
|
|||
sourceLen = strlen(source);
|
||||
if (locale == nil)
|
||||
{
|
||||
locale = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
|
||||
locale = GSPrivateDefaultLocale();
|
||||
}
|
||||
if (fmt == nil)
|
||||
{
|
||||
|
@ -2267,7 +2267,7 @@ static void Grow(DescriptionInfo *info, unsigned size)
|
|||
DescriptionInfo info;
|
||||
|
||||
if (locale == nil)
|
||||
locale = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
|
||||
locale = GSPrivateDefaultLocale();
|
||||
if (format == nil)
|
||||
format = [locale objectForKey: NSTimeDateFormatString];
|
||||
|
||||
|
|
|
@ -264,7 +264,7 @@ otherTime(NSDate* other)
|
|||
|
||||
if (locale == nil)
|
||||
{
|
||||
locale = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
|
||||
locale = GSPrivateDefaultLocale();
|
||||
}
|
||||
ws = [NSCharacterSet whitespaceAndNewlineCharacterSet];
|
||||
digits = [NSCharacterSet decimalDigitCharacterSet];
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
#include "Foundation/NSDecimalNumber.h"
|
||||
#include "Foundation/NSException.h"
|
||||
#include "Foundation/NSPortCoder.h"
|
||||
#include "Foundation/NSUserDefaults.h"
|
||||
|
||||
#include "GSPrivate.h"
|
||||
|
||||
|
@ -357,9 +356,8 @@ static NSDecimalNumber *one;
|
|||
float v = *(float *)value;
|
||||
if (GSIsNAN(v)) return notANumber;
|
||||
if (GSIsInf(v)) return (v < 0.0) ? minNumber : maxNumber;
|
||||
s = [[NSString alloc] initWithFormat: @"%g" locale:
|
||||
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation],
|
||||
(double)v];
|
||||
s = [[NSString alloc] initWithFormat: @"%g"
|
||||
locale: GSPrivateDefaultLocale(), (double)v];
|
||||
self = [self initWithString: s];
|
||||
RELEASE(s);
|
||||
return self;
|
||||
|
@ -372,9 +370,8 @@ static NSDecimalNumber *one;
|
|||
double v = *(double *)value;
|
||||
if (GSIsNAN(v)) return notANumber;
|
||||
if (GSIsInf(v)) return (v < 0.0) ? minNumber : maxNumber;
|
||||
s = [[NSString alloc] initWithFormat: @"%g" locale:
|
||||
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation],
|
||||
v];
|
||||
s = [[NSString alloc] initWithFormat: @"%g"
|
||||
locale: GSPrivateDefaultLocale(), v];
|
||||
self = [self initWithString: s];
|
||||
RELEASE(s);
|
||||
return self;
|
||||
|
@ -416,7 +413,7 @@ static NSDecimalNumber *one;
|
|||
- (id) initWithString: (NSString*)numberValue
|
||||
{
|
||||
return [self initWithString: numberValue
|
||||
locale: [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];
|
||||
locale: GSPrivateDefaultLocale()];
|
||||
}
|
||||
|
||||
- (id) initWithString: (NSString*)numberValue
|
||||
|
|
|
@ -4384,9 +4384,7 @@ static NSFileManager *fm = nil;
|
|||
else
|
||||
{
|
||||
ret = AUTORELEASE([[self allocWithZone: NSDefaultMallocZone()]
|
||||
initWithFormat: format locale:
|
||||
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
|
||||
arguments: ap]);
|
||||
initWithFormat: format locale: GSPrivateDefaultLocale() arguments: ap]);
|
||||
}
|
||||
va_end(ap);
|
||||
return ret;
|
||||
|
@ -4439,8 +4437,7 @@ static NSFileManager *fm = nil;
|
|||
return [self compare: string
|
||||
options: 0
|
||||
range: ((NSRange){0, [self length]})
|
||||
locale:
|
||||
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];
|
||||
locale: GSPrivateDefaultLocale()];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4452,8 +4449,7 @@ static NSFileManager *fm = nil;
|
|||
return [self compare: string
|
||||
options: NSCaseInsensitiveSearch
|
||||
range: ((NSRange){0, [self length]})
|
||||
locale:
|
||||
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];
|
||||
locale: GSPrivateDefaultLocale()];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1872,3 +1872,28 @@ GSPrivateDefaultsFlag(GSUserDefaultFlagType type)
|
|||
return flags[type];
|
||||
}
|
||||
|
||||
/* FIXME ... Slightly faster than
|
||||
* [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
|
||||
* but is it really worthwile?
|
||||
*/
|
||||
NSDictionary *GSPrivateDefaultLocale()
|
||||
{
|
||||
NSDictionary *locale;
|
||||
NSUserDefaults *defs;
|
||||
|
||||
if (classLock == nil)
|
||||
{
|
||||
[NSUserDefaults standardUserDefaults];
|
||||
}
|
||||
[classLock lock];
|
||||
if (sharedDefaults == nil)
|
||||
{
|
||||
[NSUserDefaults standardUserDefaults];
|
||||
}
|
||||
defs = [sharedDefaults retain];
|
||||
[classLock unlock];
|
||||
locale = [defs dictionaryRepresentation];
|
||||
[defs release];
|
||||
return locale;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue