diff --git a/ChangeLog b/ChangeLog index 6d4075055..b583b46a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2004-02-17 David Ayers + + * 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 * Source/NSCountedSet.m (-initWithCoder:): Release objects outside diff --git a/Headers/Foundation/NSLock.h b/Headers/Foundation/NSLock.h index 8fbda496c..8968716ff 100644 --- a/Headers/Foundation/NSLock.h +++ b/Headers/Foundation/NSLock.h @@ -32,9 +32,6 @@ #define _GNUstep_H_NSLock #include -#ifdef NeXT_RUNTIME -#include -#endif /* * NSLocking protocol @@ -53,7 +50,7 @@ @interface NSLock : NSObject { @private - objc_mutex_t _mutex; + void *_mutex; } - (BOOL) tryLock; @@ -71,9 +68,9 @@ @interface NSConditionLock : NSObject { @private - objc_condition_t _condition; - objc_mutex_t _mutex; - int _condition_value; + void *_condition; + void *_mutex; + int _condition_value; } /* @@ -117,7 +114,7 @@ @interface NSRecursiveLock : NSObject { @private - objc_mutex_t _mutex; + void *_mutex; } - (BOOL) tryLock; diff --git a/Headers/Foundation/NSThread.h b/Headers/Foundation/NSThread.h index ea13776f3..2f4768f3d 100644 --- a/Headers/Foundation/NSThread.h +++ b/Headers/Foundation/NSThread.h @@ -25,9 +25,6 @@ #ifndef __NSThread_h_GNUSTEP_BASE_INCLUDE #define __NSThread_h_GNUSTEP_BASE_INCLUDE -#ifdef NeXT_RUNTIME -#include -#endif #include #include #include diff --git a/Source/GNUmakefile b/Source/GNUmakefile index d18e45efc..09b62bf9b 100644 --- a/Source/GNUmakefile +++ b/Source/GNUmakefile @@ -126,10 +126,6 @@ objc-gnu2next.h GNU_HEADERS = $(ADD_HEADERS) -ifneq ($(OBJC_RUNTIME_LIB), gnu) -GNU_HEADERS += thr-mach.h -endif - # GNUStep source files BASE_MFILES = \ diff --git a/Source/NSLock.m b/Source/NSLock.m index 49fb69535..64bd86f84 100644 --- a/Source/NSLock.m +++ b/Source/NSLock.m @@ -35,6 +35,12 @@ #include "Foundation/NSException.h" #include "Foundation/NSDebug.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 NSTimeInterval GSTimeNow(); @@ -167,7 +173,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { // Ask the runtime to deallocate the mutex // 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"); } @@ -184,13 +190,13 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (BOOL) tryLock { /* Return NO if we're already locked */ - if (_mutex->owner == objc_thread_id()) + if (_MUTEX->owner == objc_thread_id()) { return NO; } // Ask the runtime to acquire a lock on the mutex - if (objc_mutex_trylock(_mutex) == -1) + if (objc_mutex_trylock(_MUTEX) == -1) { return NO; } @@ -212,8 +218,8 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; /* 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 */ - while (_mutex->owner == objc_thread_id() - || (x = objc_mutex_trylock(_mutex)) == -1) + while (_MUTEX->owner == objc_thread_id() + || (x = objc_mutex_trylock(_MUTEX)) == -1) { if (GSSleepOrFail(&ctxt) == NO) { @@ -228,11 +234,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; */ - (void) lock { - CHECK_RECURSIVE_LOCK(_mutex); + CHECK_RECURSIVE_LOCK(_MUTEX); // Ask the runtime to acquire a lock on the mutex // This will block - if (objc_mutex_lock(_mutex) == -1) + if (objc_mutex_lock(_MUTEX) == -1) { [NSException raise: NSLockException format: @"failed to lock mutex"]; @@ -243,7 +249,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (void) unlock { // 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 format: @"unlock: failed to unlock mutex"]; @@ -303,7 +309,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; if (_condition != 0) { // Ask the runtime to deallocate the condition - if (objc_condition_deallocate(_condition) == -1) + if (objc_condition_deallocate(_CONDITION) == -1) { NSWarnMLog(@"objc_condition_deallocate() failed"); } @@ -312,7 +318,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { // Ask the runtime to deallocate the mutex // 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"); } @@ -328,9 +334,9 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; // Acquiring and release the lock - (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 format: @"lockWhenCondition: failed to lock mutex"]; @@ -339,7 +345,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; while (_condition_value != value) { - if (objc_condition_wait(_condition, _mutex) == -1) + if (objc_condition_wait(_CONDITION, _MUTEX) == -1) { [NSException raise: NSConditionLockException format: @"objc_condition_wait failed"]; @@ -353,7 +359,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; int depth; // 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 if (depth == -1) @@ -376,7 +382,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; _condition_value = value; // wake up blocked threads - if (objc_condition_broadcast(_condition) == -1) + if (objc_condition_broadcast(_CONDITION) == -1) { [NSException raise: NSConditionLockException format: @"unlockWithCondition: objc_condition_broadcast failed"]; @@ -384,8 +390,8 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; } // and unlock twice - if ((objc_mutex_unlock(_mutex) == -1) - || (objc_mutex_unlock(_mutex) == -1)) + if ((objc_mutex_unlock(_MUTEX) == -1) + || (objc_mutex_unlock(_MUTEX) == -1)) { [NSException raise: NSConditionLockException format: @"unlockWithCondition: failed to unlock mutex"]; @@ -395,10 +401,10 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (BOOL) tryLock { - CHECK_RECURSIVE_CONDITION_LOCK(_mutex); + CHECK_RECURSIVE_CONDITION_LOCK(_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; else return YES; @@ -428,11 +434,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { GSSleepInfo ctxt; - CHECK_RECURSIVE_CONDITION_LOCK(_mutex); + CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX); GSSleepInit(limit, &ctxt); - while (objc_mutex_trylock(_mutex) == -1) + while (objc_mutex_trylock(_MUTEX) == -1) { if (GSSleepOrFail(&ctxt) == NO) { @@ -449,7 +455,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; #ifndef HAVE_OBJC_CONDITION_TIMEDWAIT GSSleepInfo ctxt; - CHECK_RECURSIVE_CONDITION_LOCK(_mutex); + CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX); GSSleepInit(limitDate, &ctxt); @@ -457,7 +463,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { if (_condition_value == condition_to_meet) { - while (objc_mutex_trylock(_mutex) == -1) + while (objc_mutex_trylock(_MUTEX) == -1) { if (GSSleepOrFail(&ctxt) == NO) { @@ -468,7 +474,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { return YES; } - if (objc_mutex_unlock(_mutex) == -1) + if (objc_mutex_unlock(_MUTEX) == -1) { [NSException raise: NSConditionLockException format: @"%s failed to unlock mutex", @@ -485,9 +491,9 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; NSTimeInterval atimeinterval; 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 format: @"lockWhenCondition: failed to lock mutex"]; @@ -501,7 +507,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; while (_condition_value != condition_to_meet) { - switch (objc_condition_timedwait(_condition, _mutex, &endtime)) + switch (objc_condition_timedwait(_CONDITION, _MUTEX, &endtime)) { case 0: break; @@ -525,11 +531,11 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; // These methods ignore the condition - (void) lock { - CHECK_RECURSIVE_CONDITION_LOCK(_mutex); + CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX); // Ask the runtime to acquire a lock on the mutex // This will block - if (objc_mutex_lock(_mutex) == -1) + if (objc_mutex_lock(_MUTEX) == -1) { [NSException raise: NSConditionLockException format: @"lock: failed to lock mutex"]; @@ -540,7 +546,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (void) unlock { // wake up blocked threads - if (objc_condition_broadcast(_condition) == -1) + if (objc_condition_broadcast(_CONDITION) == -1) { [NSException raise: NSConditionLockException format: @"unlockWithCondition: objc_condition_broadcast failed"]; @@ -548,7 +554,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; } // 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 format: @"unlock: failed to unlock mutex"]; @@ -600,7 +606,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { // Ask the runtime to deallocate the mutex // 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"); } @@ -616,7 +622,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (BOOL) tryLock { // Ask the runtime to acquire a lock on the mutex - if (objc_mutex_trylock(_mutex) == -1) + if (objc_mutex_trylock(_MUTEX) == -1) return NO; else return YES; @@ -632,7 +638,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; GSSleepInfo ctxt; GSSleepInit(limit, &ctxt); - while (objc_mutex_trylock(_mutex) == -1) + while (objc_mutex_trylock(_MUTEX) == -1) { if (GSSleepOrFail(&ctxt) == NO) { @@ -647,7 +653,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; { // Ask the runtime to acquire a lock on the mutex // This will block - if (objc_mutex_lock(_mutex) == -1) + if (objc_mutex_lock(_MUTEX) == -1) { [NSException raise: NSRecursiveLockException format: @"lock: failed to lock mutex"]; @@ -658,7 +664,7 @@ NSString *NSRecursiveLockException = @"NSRecursiveLockException"; - (void) unlock { // 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 format: @"unlock: failed to unlock mutex"]; diff --git a/Source/NSThread.m b/Source/NSThread.m index 75f1480e0..12b8fad89 100644 --- a/Source/NSThread.m +++ b/Source/NSThread.m @@ -38,6 +38,9 @@ #ifdef HAVE_NANOSLEEP #include #endif +#ifdef NeXT_RUNTIME +#include "thr-mach.h" +#endif #include "Foundation/NSException.h" #include "Foundation/NSThread.h" diff --git a/Headers/Additions/GNUstepBase/thr-mach.h b/Source/thr-mach.h similarity index 100% rename from Headers/Additions/GNUstepBase/thr-mach.h rename to Source/thr-mach.h diff --git a/Source/thr-mach.m b/Source/thr-mach.m index 9e27ddc14..3003d665c 100644 --- a/Source/thr-mach.m +++ b/Source/thr-mach.m @@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */ #include #include #include "GNUstepBase/objc-gnu2next.h" -#include "GNUstepBase/thr-mach.h" +#include "thr-mach.h" /* Global exit status. */ int __objc_thread_exit_status = 0; diff --git a/Source/thr-pthread.m b/Source/thr-pthread.m index 7a1c1e300..721367578 100644 --- a/Source/thr-pthread.m +++ b/Source/thr-pthread.m @@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */ #include #include #include "GNUstepBase/objc-gnu2next.h" -#include "GNUstepBase/thr-mach.h" +#include "thr-mach.h" /* Key structure for maintaining thread specific storage */ static pthread_key_t _objc_thread_storage;