mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-11 08:40:44 +00:00
* Headers/Foundation/NSLock.h: Make types of _mutex and
_condition opaic to avoid including private thr-mach.h header. * Headers/Foundation/NSThread.h: Do not include private thr-mach.h header. * Source/thr-mach.h: Moved here from Headers/Additions/GNUstepBase/thr-mach.h. * Source/NSLock.m: Include private thr-mach.h header for apple-gnu-gnu. Added defines for typing opaic instance variables and use them in various methods. * Source/NSThread.m: Include private thr-mach.h header for apple-gnu-gnu. * Source/thr-mach.m: Include private thr-mach.h header from new location. * Source/thr-pthread.m: Ditto. * Source/GNUmakefile: Do not install private thr-mach.h header. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@18607 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
a3005923c0
commit
1767ef985f
9 changed files with 70 additions and 53 deletions
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
||||||
|
2004-02-17 David Ayers <d.ayers@inode.at>
|
||||||
|
|
||||||
|
* Headers/Foundation/NSLock.h: Make types of _mutex and _condition
|
||||||
|
opaic to avoid including private thr-mach.h header.
|
||||||
|
* Headers/Foundation/NSThread.h: Do not include private thr-mach.h
|
||||||
|
header.
|
||||||
|
* Source/thr-mach.h: Moved here from
|
||||||
|
Headers/Additions/GNUstepBase/thr-mach.h.
|
||||||
|
* Source/NSLock.m: Include private thr-mach.h header for
|
||||||
|
apple-gnu-gnu. Added defines for typing opaic instance
|
||||||
|
variables and use them in various methods.
|
||||||
|
* Source/NSThread.m: Include private thr-mach.h header for
|
||||||
|
apple-gnu-gnu.
|
||||||
|
* Source/thr-mach.m: Include private thr-mach.h header from new
|
||||||
|
location.
|
||||||
|
* Source/thr-pthread.m: Ditto.
|
||||||
|
* Source/GNUmakefile: Do not install private thr-mach.h header.
|
||||||
|
|
||||||
2004-02-11 17:47 Alexander Malmberg <alexander@malmberg.org>
|
2004-02-11 17:47 Alexander Malmberg <alexander@malmberg.org>
|
||||||
|
|
||||||
* Source/NSCountedSet.m (-initWithCoder:): Release objects outside
|
* Source/NSCountedSet.m (-initWithCoder:): Release objects outside
|
||||||
|
|
|
@ -32,9 +32,6 @@
|
||||||
#define _GNUstep_H_NSLock
|
#define _GNUstep_H_NSLock
|
||||||
|
|
||||||
#include <Foundation/NSObject.h>
|
#include <Foundation/NSObject.h>
|
||||||
#ifdef NeXT_RUNTIME
|
|
||||||
#include <GNUstepBase/thr-mach.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NSLocking protocol
|
* NSLocking protocol
|
||||||
|
@ -53,7 +50,7 @@
|
||||||
@interface NSLock : NSObject <NSLocking, GCFinalization>
|
@interface NSLock : NSObject <NSLocking, GCFinalization>
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
objc_mutex_t _mutex;
|
void *_mutex;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) tryLock;
|
- (BOOL) tryLock;
|
||||||
|
@ -71,8 +68,8 @@
|
||||||
@interface NSConditionLock : NSObject <NSLocking, GCFinalization>
|
@interface NSConditionLock : NSObject <NSLocking, GCFinalization>
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
objc_condition_t _condition;
|
void *_condition;
|
||||||
objc_mutex_t _mutex;
|
void *_mutex;
|
||||||
int _condition_value;
|
int _condition_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +114,7 @@
|
||||||
@interface NSRecursiveLock : NSObject <NSLocking, GCFinalization>
|
@interface NSRecursiveLock : NSObject <NSLocking, GCFinalization>
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
objc_mutex_t _mutex;
|
void *_mutex;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) tryLock;
|
- (BOOL) tryLock;
|
||||||
|
|
|
@ -25,9 +25,6 @@
|
||||||
#ifndef __NSThread_h_GNUSTEP_BASE_INCLUDE
|
#ifndef __NSThread_h_GNUSTEP_BASE_INCLUDE
|
||||||
#define __NSThread_h_GNUSTEP_BASE_INCLUDE
|
#define __NSThread_h_GNUSTEP_BASE_INCLUDE
|
||||||
|
|
||||||
#ifdef NeXT_RUNTIME
|
|
||||||
#include <GNUstepBase/thr-mach.h>
|
|
||||||
#endif
|
|
||||||
#include <Foundation/NSDictionary.h>
|
#include <Foundation/NSDictionary.h>
|
||||||
#include <Foundation/NSDate.h>
|
#include <Foundation/NSDate.h>
|
||||||
#include <Foundation/NSException.h>
|
#include <Foundation/NSException.h>
|
||||||
|
|
|
@ -126,10 +126,6 @@ objc-gnu2next.h
|
||||||
|
|
||||||
GNU_HEADERS = $(ADD_HEADERS)
|
GNU_HEADERS = $(ADD_HEADERS)
|
||||||
|
|
||||||
ifneq ($(OBJC_RUNTIME_LIB), gnu)
|
|
||||||
GNU_HEADERS += thr-mach.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
# GNUStep source files
|
# GNUStep source files
|
||||||
|
|
||||||
BASE_MFILES = \
|
BASE_MFILES = \
|
||||||
|
|
|
@ -35,6 +35,12 @@
|
||||||
#include "Foundation/NSException.h"
|
#include "Foundation/NSException.h"
|
||||||
#include "Foundation/NSDebug.h"
|
#include "Foundation/NSDebug.h"
|
||||||
#include "Foundation/NSThread.h"
|
#include "Foundation/NSThread.h"
|
||||||
|
#ifdef NeXT_RUNTIME
|
||||||
|
#include "thr-mach.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _MUTEX ((objc_mutex_t)_mutex)
|
||||||
|
#define _CONDITION ((objc_condition_t)_condition)
|
||||||
|
|
||||||
extern void GSSleepUntilIntervalSinceReferenceDate(NSTimeInterval);
|
extern void GSSleepUntilIntervalSinceReferenceDate(NSTimeInterval);
|
||||||
extern NSTimeInterval GSTimeNow();
|
extern NSTimeInterval GSTimeNow();
|
||||||
|
@ -167,7 +173,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
// Ask the runtime to deallocate the mutex
|
// Ask the runtime to deallocate the mutex
|
||||||
// If there are outstanding locks then it will block
|
// If there are outstanding locks then it will block
|
||||||
if (objc_mutex_deallocate(_mutex) == -1)
|
if (objc_mutex_deallocate(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
||||||
}
|
}
|
||||||
|
@ -184,13 +190,13 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
- (BOOL) tryLock
|
- (BOOL) tryLock
|
||||||
{
|
{
|
||||||
/* Return NO if we're already locked */
|
/* Return NO if we're already locked */
|
||||||
if (_mutex->owner == objc_thread_id())
|
if (_MUTEX->owner == objc_thread_id())
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
if (objc_mutex_trylock(_mutex) == -1)
|
if (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
@ -212,8 +218,8 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
|
|
||||||
/* This is really the behavior of OpenStep, if the current thread has
|
/* This is really the behavior of OpenStep, if the current thread has
|
||||||
the lock, we just block until the time limit is up. Very odd */
|
the lock, we just block until the time limit is up. Very odd */
|
||||||
while (_mutex->owner == objc_thread_id()
|
while (_MUTEX->owner == objc_thread_id()
|
||||||
|| (x = objc_mutex_trylock(_mutex)) == -1)
|
|| (x = objc_mutex_trylock(_MUTEX)) == -1)
|
||||||
{
|
{
|
||||||
if (GSSleepOrFail(&ctxt) == NO)
|
if (GSSleepOrFail(&ctxt) == NO)
|
||||||
{
|
{
|
||||||
|
@ -228,11 +234,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
*/
|
*/
|
||||||
- (void) lock
|
- (void) lock
|
||||||
{
|
{
|
||||||
CHECK_RECURSIVE_LOCK(_mutex);
|
CHECK_RECURSIVE_LOCK(_MUTEX);
|
||||||
|
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
// This will block
|
// This will block
|
||||||
if (objc_mutex_lock(_mutex) == -1)
|
if (objc_mutex_lock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSLockException
|
[NSException raise: NSLockException
|
||||||
format: @"failed to lock mutex"];
|
format: @"failed to lock mutex"];
|
||||||
|
@ -243,7 +249,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
- (void) unlock
|
- (void) unlock
|
||||||
{
|
{
|
||||||
// Ask the runtime to release a lock on the mutex
|
// Ask the runtime to release a lock on the mutex
|
||||||
if (objc_mutex_unlock(_mutex) == -1)
|
if (objc_mutex_unlock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSLockException
|
[NSException raise: NSLockException
|
||||||
format: @"unlock: failed to unlock mutex"];
|
format: @"unlock: failed to unlock mutex"];
|
||||||
|
@ -303,7 +309,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
if (_condition != 0)
|
if (_condition != 0)
|
||||||
{
|
{
|
||||||
// Ask the runtime to deallocate the condition
|
// Ask the runtime to deallocate the condition
|
||||||
if (objc_condition_deallocate(_condition) == -1)
|
if (objc_condition_deallocate(_CONDITION) == -1)
|
||||||
{
|
{
|
||||||
NSWarnMLog(@"objc_condition_deallocate() failed");
|
NSWarnMLog(@"objc_condition_deallocate() failed");
|
||||||
}
|
}
|
||||||
|
@ -312,7 +318,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
// Ask the runtime to deallocate the mutex
|
// Ask the runtime to deallocate the mutex
|
||||||
// If there are outstanding locks then it will block
|
// If there are outstanding locks then it will block
|
||||||
if (objc_mutex_deallocate(_mutex) == -1)
|
if (objc_mutex_deallocate(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
||||||
}
|
}
|
||||||
|
@ -328,9 +334,9 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
// Acquiring and release the lock
|
// Acquiring and release the lock
|
||||||
- (void) lockWhenCondition: (int)value
|
- (void) lockWhenCondition: (int)value
|
||||||
{
|
{
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
if (objc_mutex_lock(_mutex) == -1)
|
if (objc_mutex_lock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"lockWhenCondition: failed to lock mutex"];
|
format: @"lockWhenCondition: failed to lock mutex"];
|
||||||
|
@ -339,7 +345,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
|
|
||||||
while (_condition_value != value)
|
while (_condition_value != value)
|
||||||
{
|
{
|
||||||
if (objc_condition_wait(_condition, _mutex) == -1)
|
if (objc_condition_wait(_CONDITION, _MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"objc_condition_wait failed"];
|
format: @"objc_condition_wait failed"];
|
||||||
|
@ -353,7 +359,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
int depth;
|
int depth;
|
||||||
|
|
||||||
// First check to make sure we have the lock
|
// First check to make sure we have the lock
|
||||||
depth = objc_mutex_trylock(_mutex);
|
depth = objc_mutex_trylock(_MUTEX);
|
||||||
|
|
||||||
// Another thread has the lock so abort
|
// Another thread has the lock so abort
|
||||||
if (depth == -1)
|
if (depth == -1)
|
||||||
|
@ -376,7 +382,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
_condition_value = value;
|
_condition_value = value;
|
||||||
|
|
||||||
// wake up blocked threads
|
// wake up blocked threads
|
||||||
if (objc_condition_broadcast(_condition) == -1)
|
if (objc_condition_broadcast(_CONDITION) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"unlockWithCondition: objc_condition_broadcast failed"];
|
format: @"unlockWithCondition: objc_condition_broadcast failed"];
|
||||||
|
@ -384,8 +390,8 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
}
|
}
|
||||||
|
|
||||||
// and unlock twice
|
// and unlock twice
|
||||||
if ((objc_mutex_unlock(_mutex) == -1)
|
if ((objc_mutex_unlock(_MUTEX) == -1)
|
||||||
|| (objc_mutex_unlock(_mutex) == -1))
|
|| (objc_mutex_unlock(_MUTEX) == -1))
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"unlockWithCondition: failed to unlock mutex"];
|
format: @"unlockWithCondition: failed to unlock mutex"];
|
||||||
|
@ -395,10 +401,10 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
|
|
||||||
- (BOOL) tryLock
|
- (BOOL) tryLock
|
||||||
{
|
{
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
if (objc_mutex_trylock(_mutex) == -1)
|
if (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
return NO;
|
return NO;
|
||||||
else
|
else
|
||||||
return YES;
|
return YES;
|
||||||
|
@ -428,11 +434,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
GSSleepInfo ctxt;
|
GSSleepInfo ctxt;
|
||||||
|
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
GSSleepInit(limit, &ctxt);
|
GSSleepInit(limit, &ctxt);
|
||||||
|
|
||||||
while (objc_mutex_trylock(_mutex) == -1)
|
while (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
if (GSSleepOrFail(&ctxt) == NO)
|
if (GSSleepOrFail(&ctxt) == NO)
|
||||||
{
|
{
|
||||||
|
@ -449,7 +455,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
#ifndef HAVE_OBJC_CONDITION_TIMEDWAIT
|
#ifndef HAVE_OBJC_CONDITION_TIMEDWAIT
|
||||||
GSSleepInfo ctxt;
|
GSSleepInfo ctxt;
|
||||||
|
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
GSSleepInit(limitDate, &ctxt);
|
GSSleepInit(limitDate, &ctxt);
|
||||||
|
|
||||||
|
@ -457,7 +463,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
if (_condition_value == condition_to_meet)
|
if (_condition_value == condition_to_meet)
|
||||||
{
|
{
|
||||||
while (objc_mutex_trylock(_mutex) == -1)
|
while (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
if (GSSleepOrFail(&ctxt) == NO)
|
if (GSSleepOrFail(&ctxt) == NO)
|
||||||
{
|
{
|
||||||
|
@ -468,7 +474,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
if (objc_mutex_unlock(_mutex) == -1)
|
if (objc_mutex_unlock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"%s failed to unlock mutex",
|
format: @"%s failed to unlock mutex",
|
||||||
|
@ -485,9 +491,9 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
NSTimeInterval atimeinterval;
|
NSTimeInterval atimeinterval;
|
||||||
struct timespec endtime;
|
struct timespec endtime;
|
||||||
|
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
if (-1 == objc_mutex_lock(_mutex))
|
if (-1 == objc_mutex_lock(_MUTEX))
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"lockWhenCondition: failed to lock mutex"];
|
format: @"lockWhenCondition: failed to lock mutex"];
|
||||||
|
|
||||||
|
@ -501,7 +507,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
|
|
||||||
while (_condition_value != condition_to_meet)
|
while (_condition_value != condition_to_meet)
|
||||||
{
|
{
|
||||||
switch (objc_condition_timedwait(_condition, _mutex, &endtime))
|
switch (objc_condition_timedwait(_CONDITION, _MUTEX, &endtime))
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
@ -525,11 +531,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
// These methods ignore the condition
|
// These methods ignore the condition
|
||||||
- (void) lock
|
- (void) lock
|
||||||
{
|
{
|
||||||
CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
|
CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
|
||||||
|
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
// This will block
|
// This will block
|
||||||
if (objc_mutex_lock(_mutex) == -1)
|
if (objc_mutex_lock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"lock: failed to lock mutex"];
|
format: @"lock: failed to lock mutex"];
|
||||||
|
@ -540,7 +546,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
- (void) unlock
|
- (void) unlock
|
||||||
{
|
{
|
||||||
// wake up blocked threads
|
// wake up blocked threads
|
||||||
if (objc_condition_broadcast(_condition) == -1)
|
if (objc_condition_broadcast(_CONDITION) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"unlockWithCondition: objc_condition_broadcast failed"];
|
format: @"unlockWithCondition: objc_condition_broadcast failed"];
|
||||||
|
@ -548,7 +554,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ask the runtime to release a lock on the mutex
|
// Ask the runtime to release a lock on the mutex
|
||||||
if (objc_mutex_unlock(_mutex) == -1)
|
if (objc_mutex_unlock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSConditionLockException
|
[NSException raise: NSConditionLockException
|
||||||
format: @"unlock: failed to unlock mutex"];
|
format: @"unlock: failed to unlock mutex"];
|
||||||
|
@ -600,7 +606,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
// Ask the runtime to deallocate the mutex
|
// Ask the runtime to deallocate the mutex
|
||||||
// If there are outstanding locks then it will block
|
// If there are outstanding locks then it will block
|
||||||
if (objc_mutex_deallocate(_mutex) == -1)
|
if (objc_mutex_deallocate(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
NSWarnMLog(@"objc_mutex_deallocate() failed");
|
||||||
}
|
}
|
||||||
|
@ -616,7 +622,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
- (BOOL) tryLock
|
- (BOOL) tryLock
|
||||||
{
|
{
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
if (objc_mutex_trylock(_mutex) == -1)
|
if (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
return NO;
|
return NO;
|
||||||
else
|
else
|
||||||
return YES;
|
return YES;
|
||||||
|
@ -632,7 +638,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
GSSleepInfo ctxt;
|
GSSleepInfo ctxt;
|
||||||
|
|
||||||
GSSleepInit(limit, &ctxt);
|
GSSleepInit(limit, &ctxt);
|
||||||
while (objc_mutex_trylock(_mutex) == -1)
|
while (objc_mutex_trylock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
if (GSSleepOrFail(&ctxt) == NO)
|
if (GSSleepOrFail(&ctxt) == NO)
|
||||||
{
|
{
|
||||||
|
@ -647,7 +653,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
{
|
{
|
||||||
// Ask the runtime to acquire a lock on the mutex
|
// Ask the runtime to acquire a lock on the mutex
|
||||||
// This will block
|
// This will block
|
||||||
if (objc_mutex_lock(_mutex) == -1)
|
if (objc_mutex_lock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSRecursiveLockException
|
[NSException raise: NSRecursiveLockException
|
||||||
format: @"lock: failed to lock mutex"];
|
format: @"lock: failed to lock mutex"];
|
||||||
|
@ -658,7 +664,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException";
|
||||||
- (void) unlock
|
- (void) unlock
|
||||||
{
|
{
|
||||||
// Ask the runtime to release a lock on the mutex
|
// Ask the runtime to release a lock on the mutex
|
||||||
if (objc_mutex_unlock(_mutex) == -1)
|
if (objc_mutex_unlock(_MUTEX) == -1)
|
||||||
{
|
{
|
||||||
[NSException raise: NSRecursiveLockException
|
[NSException raise: NSRecursiveLockException
|
||||||
format: @"unlock: failed to unlock mutex"];
|
format: @"unlock: failed to unlock mutex"];
|
||||||
|
|
|
@ -38,6 +38,9 @@
|
||||||
#ifdef HAVE_NANOSLEEP
|
#ifdef HAVE_NANOSLEEP
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef NeXT_RUNTIME
|
||||||
|
#include "thr-mach.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "Foundation/NSException.h"
|
#include "Foundation/NSException.h"
|
||||||
#include "Foundation/NSThread.h"
|
#include "Foundation/NSThread.h"
|
||||||
|
|
|
@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
|
||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
#include <mach/cthreads.h>
|
#include <mach/cthreads.h>
|
||||||
#include "GNUstepBase/objc-gnu2next.h"
|
#include "GNUstepBase/objc-gnu2next.h"
|
||||||
#include "GNUstepBase/thr-mach.h"
|
#include "thr-mach.h"
|
||||||
|
|
||||||
/* Global exit status. */
|
/* Global exit status. */
|
||||||
int __objc_thread_exit_status = 0;
|
int __objc_thread_exit_status = 0;
|
||||||
|
|
|
@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "GNUstepBase/objc-gnu2next.h"
|
#include "GNUstepBase/objc-gnu2next.h"
|
||||||
#include "GNUstepBase/thr-mach.h"
|
#include "thr-mach.h"
|
||||||
|
|
||||||
/* Key structure for maintaining thread specific storage */
|
/* Key structure for maintaining thread specific storage */
|
||||||
static pthread_key_t _objc_thread_storage;
|
static pthread_key_t _objc_thread_storage;
|
||||||
|
|
Loading…
Reference in a new issue