* 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:
David Ayers 2004-02-17 12:55:02 +00:00
parent a3005923c0
commit 1767ef985f
9 changed files with 70 additions and 53 deletions

View file

@ -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

View file

@ -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,9 +68,9 @@
@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;

View file

@ -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>

View file

@ -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 = \

View file

@ -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"];

View file

@ -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"

View file

@ -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;

View file

@ -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;