[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFA/base] Make thr-mach.h private
From: |
David Ayers |
Subject: |
[RFA/base] Make thr-mach.h private |
Date: |
Wed, 11 Feb 2004 15:26:05 +0100 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040113 |
Hello everyone,
Barring objections, I would like to make thr-mach.h a private header
with this patch. It should only have a user visible effect for building
apple-gnu-gnu. It would be nice, if someone can test this there and
tell me if it still builds correctly. (A build log with messages=yes
would be nice, but please send privately.) AFAIK there are still issues
when trying to run code on apple-gnu-gnu.
* Headers/Foundation/NSLock.h: Make types of _mutex and _condition
transparent 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 transparent 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.
Cheers,
David
Index: Headers/Additions/GNUstepBase/thr-mach.h
===================================================================
RCS file: Headers/Additions/GNUstepBase/thr-mach.h
diff -N Headers/Additions/GNUstepBase/thr-mach.h
--- Headers/Additions/GNUstepBase/thr-mach.h 31 Jul 2003 23:49:29 -0000
1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,117 +0,0 @@
-/* Thread and mutex controls for Objective C.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- Contributed by Galen C. Hunt (gchunt@cs.rochester.edu)
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-GNU CC is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2, or (at your option) any later version.
-
-GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License along with
-GNU CC; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* As a special exception, if you link this library with files
- compiled with GCC to produce an executable, this does not cause
- the resulting executable to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License. */
-
-
-#ifndef __thread_INCLUDE_GNU
-#define __thread_INCLUDE_GNU
-
-#include <objc/objc.h>
-
-/*************************************************************************
- * Universal static variables:
- */
-extern int __objc_thread_exit_status; /* Global exit status. */
-
-/********
- * Thread safe implementation types and functions.
- */
-
-/* Thread priorities */
-#define OBJC_THREAD_INTERACTIVE_PRIORITY 2
-#define OBJC_THREAD_BACKGROUND_PRIORITY 1
-#define OBJC_THREAD_LOW_PRIORITY 0
-
-/* A thread */
-typedef void * objc_thread_t;
-
-/* This structure represents a single mutual exclusion lock. */
-struct objc_mutex
-{
- volatile objc_thread_t owner; /* Id of thread that owns. */
- volatile int depth; /* # of acquires. */
- void * backend; /* Specific to backend */
-};
-typedef struct objc_mutex *objc_mutex_t;
-
-/* This structure represents a single condition mutex */
-struct objc_condition
-{
- void * backend; /* Specific to backend */
-};
-typedef struct objc_condition *objc_condition_t;
-
-/* Frontend mutex functions */
-objc_mutex_t objc_mutex_allocate(void);
-int objc_mutex_deallocate(objc_mutex_t mutex);
-int objc_mutex_lock(objc_mutex_t mutex);
-int objc_mutex_unlock(objc_mutex_t mutex);
-int objc_mutex_trylock(objc_mutex_t mutex);
-
-/* Frontend condition mutex functions */
-objc_condition_t objc_condition_allocate(void);
-int objc_condition_deallocate(objc_condition_t condition);
-int objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex);
-int objc_condition_signal(objc_condition_t condition);
-int objc_condition_broadcast(objc_condition_t condition);
-
-/* Frontend thread functions */
-objc_thread_t objc_thread_detach(SEL selector, id object, id argument);
-void objc_thread_yield(void);
-int objc_thread_exit(void);
-int objc_thread_set_priority(int priority);
-int objc_thread_get_priority(void);
-void * objc_thread_get_data(void);
-int objc_thread_set_data(void *value);
-objc_thread_t objc_thread_id(void);
-void objc_thread_add(void);
-void objc_thread_remove(void);
-
-/*
- Use this to set the hook function that will be called when the
- runtime initially becomes multi threaded.
- The hook function is only called once, meaning only when the
- 2nd thread is spawned, not for each and every thread.
-
- It returns the previous hook function or NULL if there is none.
-
- A program outside of the runtime could set this to some function so
- it can be informed; for example, the GNUstep Base Library sets it
- so it can implement the NSBecomingMultiThreaded notification.
- */
-typedef void (*objc_thread_callback)();
-objc_thread_callback objc_set_thread_callback(objc_thread_callback func);
-
-#endif /* not __thread_INCLUDE_GNU */
Index: Headers/Foundation/NSLock.h
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Headers/Foundation/NSLock.h,v
retrieving revision 1.2
diff -u -r1.2 NSLock.h
--- Headers/Foundation/NSLock.h 30 Oct 2003 13:44:52 -0000 1.2
+++ Headers/Foundation/NSLock.h 11 Feb 2004 13:54:24 -0000
@@ -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;
Index: Headers/Foundation/NSThread.h
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Headers/Foundation/NSThread.h,v
retrieving revision 1.1
diff -u -r1.1 NSThread.h
--- Headers/Foundation/NSThread.h 31 Jul 2003 23:49:30 -0000 1.1
+++ Headers/Foundation/NSThread.h 11 Feb 2004 13:54:24 -0000
@@ -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>
Index: Source/GNUmakefile
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/GNUmakefile,v
retrieving revision 1.140
diff -u -r1.140 GNUmakefile
--- Source/GNUmakefile 22 Jan 2004 09:37:07 -0000 1.140
+++ Source/GNUmakefile 11 Feb 2004 13:54:24 -0000
@@ -126,10 +126,6 @@
GNU_HEADERS = $(ADD_HEADERS)
-ifneq ($(OBJC_RUNTIME_LIB), gnu)
-GNU_HEADERS += thr-mach.h
-endif
-
# GNUStep source files
BASE_MFILES = \
Index: Source/NSLock.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/NSLock.m,v
retrieving revision 1.27
diff -u -r1.27 NSLock.m
--- Source/NSLock.m 30 Oct 2003 13:44:53 -0000 1.27
+++ Source/NSLock.m 11 Feb 2004 13:54:24 -0000
@@ -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 @@
{
// 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 @@
- (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 @@
/* 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 @@
*/
- (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 @@
- (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 @@
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 @@
{
// 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 @@
// 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 @@
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 @@
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 @@
_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 @@
}
// 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 @@
- (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 @@
{
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 @@
#ifndef HAVE_OBJC_CONDITION_TIMEDWAIT
GSSleepInfo ctxt;
- CHECK_RECURSIVE_CONDITION_LOCK(_mutex);
+ CHECK_RECURSIVE_CONDITION_LOCK(_MUTEX);
GSSleepInit(limitDate, &ctxt);
@@ -457,7 +463,7 @@
{
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 @@
{
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 @@
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 @@
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 @@
// 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 @@
- (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 @@
}
// 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 @@
{
// 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 @@
- (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 @@
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 @@
{
// 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 @@
- (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"];
Index: Source/NSThread.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/NSThread.m,v
retrieving revision 1.75
diff -u -r1.75 NSThread.m
--- Source/NSThread.m 23 Dec 2003 17:41:38 -0000 1.75
+++ Source/NSThread.m 11 Feb 2004 13:54:24 -0000
@@ -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"
Index: Source/thr-mach.h
===================================================================
RCS file: Source/thr-mach.h
diff -N Source/thr-mach.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Source/thr-mach.h 11 Feb 2004 13:54:24 -0000
@@ -0,0 +1,117 @@
+/* Thread and mutex controls for Objective C.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Contributed by Galen C. Hunt (gchunt@cs.rochester.edu)
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+GNU CC is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2, or (at your option) any later version.
+
+GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+details.
+
+You should have received a copy of the GNU General Public License along with
+GNU CC; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with files
+ compiled with GCC to produce an executable, this does not cause
+ the resulting executable to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+
+#ifndef __thread_INCLUDE_GNU
+#define __thread_INCLUDE_GNU
+
+#include <objc/objc.h>
+
+/*************************************************************************
+ * Universal static variables:
+ */
+extern int __objc_thread_exit_status; /* Global exit status. */
+
+/********
+ * Thread safe implementation types and functions.
+ */
+
+/* Thread priorities */
+#define OBJC_THREAD_INTERACTIVE_PRIORITY 2
+#define OBJC_THREAD_BACKGROUND_PRIORITY 1
+#define OBJC_THREAD_LOW_PRIORITY 0
+
+/* A thread */
+typedef void * objc_thread_t;
+
+/* This structure represents a single mutual exclusion lock. */
+struct objc_mutex
+{
+ volatile objc_thread_t owner; /* Id of thread that owns. */
+ volatile int depth; /* # of acquires. */
+ void * backend; /* Specific to backend */
+};
+typedef struct objc_mutex *objc_mutex_t;
+
+/* This structure represents a single condition mutex */
+struct objc_condition
+{
+ void * backend; /* Specific to backend */
+};
+typedef struct objc_condition *objc_condition_t;
+
+/* Frontend mutex functions */
+objc_mutex_t objc_mutex_allocate(void);
+int objc_mutex_deallocate(objc_mutex_t mutex);
+int objc_mutex_lock(objc_mutex_t mutex);
+int objc_mutex_unlock(objc_mutex_t mutex);
+int objc_mutex_trylock(objc_mutex_t mutex);
+
+/* Frontend condition mutex functions */
+objc_condition_t objc_condition_allocate(void);
+int objc_condition_deallocate(objc_condition_t condition);
+int objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex);
+int objc_condition_signal(objc_condition_t condition);
+int objc_condition_broadcast(objc_condition_t condition);
+
+/* Frontend thread functions */
+objc_thread_t objc_thread_detach(SEL selector, id object, id argument);
+void objc_thread_yield(void);
+int objc_thread_exit(void);
+int objc_thread_set_priority(int priority);
+int objc_thread_get_priority(void);
+void * objc_thread_get_data(void);
+int objc_thread_set_data(void *value);
+objc_thread_t objc_thread_id(void);
+void objc_thread_add(void);
+void objc_thread_remove(void);
+
+/*
+ Use this to set the hook function that will be called when the
+ runtime initially becomes multi threaded.
+ The hook function is only called once, meaning only when the
+ 2nd thread is spawned, not for each and every thread.
+
+ It returns the previous hook function or NULL if there is none.
+
+ A program outside of the runtime could set this to some function so
+ it can be informed; for example, the GNUstep Base Library sets it
+ so it can implement the NSBecomingMultiThreaded notification.
+ */
+typedef void (*objc_thread_callback)();
+objc_thread_callback objc_set_thread_callback(objc_thread_callback func);
+
+#endif /* not __thread_INCLUDE_GNU */
Index: Source/thr-mach.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/thr-mach.m,v
retrieving revision 1.4
diff -u -r1.4 thr-mach.m
--- Source/thr-mach.m 31 Jul 2003 23:49:32 -0000 1.4
+++ Source/thr-mach.m 11 Feb 2004 13:54:24 -0000
@@ -29,7 +29,7 @@
#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;
Index: Source/thr-pthread.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/base/Source/thr-pthread.m,v
retrieving revision 1.5
diff -u -r1.5 thr-pthread.m
--- Source/thr-pthread.m 31 Jul 2003 23:49:32 -0000 1.5
+++ Source/thr-pthread.m 11 Feb 2004 13:54:24 -0000
@@ -28,7 +28,7 @@
#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;
- [RFA/base] Make thr-mach.h private,
David Ayers <=