mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-10 16:20:42 +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>
|
||||
|
||||
* Source/NSCountedSet.m (-initWithCoder:): Release objects outside
|
||||
|
|
|
@ -32,9 +32,6 @@
|
|||
#define _GNUstep_H_NSLock
|
||||
|
||||
#include <Foundation/NSObject.h>
|
||||
#ifdef NeXT_RUNTIME
|
||||
#include <GNUstepBase/thr-mach.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NSLocking protocol
|
||||
|
@ -53,7 +50,7 @@
|
|||
@interface NSLock : NSObject <NSLocking, GCFinalization>
|
||||
{
|
||||
@private
|
||||
objc_mutex_t _mutex;
|
||||
void *_mutex;
|
||||
}
|
||||
|
||||
- (BOOL) tryLock;
|
||||
|
@ -71,9 +68,9 @@
|
|||
@interface NSConditionLock : NSObject <NSLocking, GCFinalization>
|
||||
{
|
||||
@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 <NSLocking, GCFinalization>
|
||||
{
|
||||
@private
|
||||
objc_mutex_t _mutex;
|
||||
void *_mutex;
|
||||
}
|
||||
|
||||
- (BOOL) tryLock;
|
||||
|
|
|
@ -25,9 +25,6 @@
|
|||
#ifndef __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/NSDate.h>
|
||||
#include <Foundation/NSException.h>
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -38,6 +38,9 @@
|
|||
#ifdef HAVE_NANOSLEEP
|
||||
#include <time.h>
|
||||
#endif
|
||||
#ifdef NeXT_RUNTIME
|
||||
#include "thr-mach.h"
|
||||
#endif
|
||||
|
||||
#include "Foundation/NSException.h"
|
||||
#include "Foundation/NSThread.h"
|
||||
|
|
|
@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
|
|||
#include <mach/mach.h>
|
||||
#include <mach/cthreads.h>
|
||||
#include "GNUstepBase/objc-gnu2next.h"
|
||||
#include "GNUstepBase/thr-mach.h"
|
||||
#include "thr-mach.h"
|
||||
|
||||
/* Global exit status. */
|
||||
int __objc_thread_exit_status = 0;
|
||||
|
|
|
@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
|
|||
#include <pthread.h>
|
||||
#include <stdarg.h>
|
||||
#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;
|
||||
|
|
Loading…
Reference in a new issue