24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | | |
131256 | 2000-04-26 | Martin Stjernholm | | * $Id: threads.h,v 1.90 2000/04/25 22:35:20 mast Exp $
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | | */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #ifndef THREADS_H
#define THREADS_H
#include "machine.h"
#include "interpret.h"
|
a7fef4 | 1997-09-03 | Per Hedbor | | #include "object.h"
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include "error.h"
|
d978c0 | 2000-02-04 | Henrik Grubbström (Grubba) | |
#include <signal.h>
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif /* HAVE_SYS_TYPES_H */
|
53ffab | 1999-08-10 | Martin Stjernholm | | #ifdef PIKE_THREADS
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | |
040900 | 1998-02-10 | Per Hedbor | | * UNIX_THREADS : Unix international threads
* POSIX_THREADS : POSIX standard threads
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | * SGI_SPROC_THREADS : SGI sproc() based threads
|
040900 | 1998-02-10 | Per Hedbor | | * NT_THREADS : NT threads
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | */
#ifdef _UNIX_THREADS
|
97ffe4 | 1997-01-26 | Per Hedbor | | #ifdef HAVE_THREAD_H
#define UNIX_THREADS
#include <thread.h>
#undef HAVE_PTHREAD_H
#undef HAVE_THREAD_H
#endif
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #endif /* _UNIX_THREADS */
|
97ffe4 | 1997-01-26 | Per Hedbor | |
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #ifdef _MIT_POSIX_THREADS
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define POSIX_THREADS
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include <pthread.h>
#undef HAVE_PTHREAD_H
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #endif /* _MIT_POSIX_THREADS */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #ifdef _SGI_SPROC_THREADS
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #undef SGI_SPROC_THREADS
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #undef HAVE_SPROC
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #endif /* _SGI_SPROC_THREADS */
|
97ffe4 | 1997-01-26 | Per Hedbor | |
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | extern int num_threads;
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | extern int live_threads;
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | struct object;
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | extern size_t thread_stack_size;
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | extern struct object *thread_id;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #define DEFINE_MUTEX(X) PIKE_MUTEX_T X
|
97ffe4 | 1997-01-26 | Per Hedbor | |
#ifdef POSIX_THREADS
|
71ac9e | 1999-08-29 | Fredrik Hübinette (Hubbe) | |
#ifdef HAVE_PTHREAD_ATFORK
#define th_atfork(X,Y,Z) pthread_atfork((X),(Y),(Z))
#define th_atfork_prepare()
#define th_atfork_parent()
#define th_atfork_child()
#else
int th_atfork(void (*)(void),void (*)(void),void (*)(void));
void th_atfork_prepare(void);
void th_atfork_parent(void);
void th_atfork_child(void);
#endif
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define THREAD_T pthread_t
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #define PIKE_MUTEX_T pthread_mutex_t
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define mt_init(X) pthread_mutex_init((X),0)
#define mt_lock(X) pthread_mutex_lock(X)
#define mt_trylock(X) pthread_mutex_trylock(X)
#define mt_unlock(X) pthread_mutex_unlock(X)
#define mt_destroy(X) pthread_mutex_destroy(X)
|
97ffe4 | 1997-01-26 | Per Hedbor | |
#define th_setconcurrency(X)
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #ifdef HAVE_PTHREAD_YIELD
#define th_yield() pthread_yield()
#else
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define th_yield()
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #endif /* HAVE_PTHREAD_YIELD */
|
864d3c | 1998-01-29 | Fredrik Hübinette (Hubbe) | | extern pthread_attr_t pattr;
extern pthread_attr_t small_pattr;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
#define th_create(ID,fun,arg) pthread_create(ID,&pattr,fun,arg)
|
864d3c | 1998-01-29 | Fredrik Hübinette (Hubbe) | | #define th_create_small(ID,fun,arg) pthread_create(ID,&small_pattr,fun,arg)
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define th_exit(foo) pthread_exit(foo)
|
a70bd0 | 1996-12-15 | Niels Möller | | #define th_self() pthread_self()
|
ae7def | 1998-08-17 | Per Hedbor | | #define th_kill(ID,sig) pthread_kill((ID),(sig))
|
6a64c3 | 1998-09-05 | Henrik Grubbström (Grubba) | | #define th_join(ID,res) pthread_join((ID),(res))
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #ifdef HAVE_PTHREAD_COND_INIT
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define COND_T pthread_cond_t
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
|
743529 | 1998-08-31 | Henrik Grubbström (Grubba) | | #ifdef HAVE_PTHREAD_CONDATTR_DEFAULT_AIX
|
6e678f | 1998-08-06 | Henrik Grubbström (Grubba) | | #define co_init(X) pthread_cond_init((X), &pthread_condattr_default)
|
743529 | 1998-08-31 | Henrik Grubbström (Grubba) | | #else /* !HAVE_PTHREAD_CONDATTR_DEFAULT_AIX */
#ifdef HAVE_PTHREAD_CONDATTR_DEFAULT
#define co_init(X) pthread_cond_init((X), pthread_condattr_default)
#else /* !HAVE_PTHREAD_CONDATTR_DEFAULT */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define co_init(X) pthread_cond_init((X), 0)
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #endif /* HAVE_PTHREAD_CONDATTR_DEFAULT */
|
743529 | 1998-08-31 | Henrik Grubbström (Grubba) | | #endif /* HAVE_PTHREAD_CONDATTR_DEFAULT_AIX */
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define co_wait(COND, MUTEX) pthread_cond_wait((COND), (MUTEX))
#define co_signal(X) pthread_cond_signal(X)
#define co_broadcast(X) pthread_cond_broadcast(X)
#define co_destroy(X) pthread_cond_destroy(X)
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #else
#error No way to make cond-vars
#endif /* HAVE_PTHREAD_COND_INIT */
#endif /* POSIX_THREADS */
|
97ffe4 | 1997-01-26 | Per Hedbor | |
#ifdef UNIX_THREADS
#define THREAD_T thread_t
#define PTHREAD_MUTEX_INITIALIZER DEFAULTMUTEX
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #define PIKE_MUTEX_T mutex_t
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define mt_init(X) mutex_init((X),USYNC_THREAD,0)
#define mt_lock(X) mutex_lock(X)
#define mt_trylock(X) mutex_trylock(X)
#define mt_unlock(X) mutex_unlock(X)
#define mt_destroy(X) mutex_destroy(X)
#define th_setconcurrency(X) thr_setconcurrency(X)
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | #define th_create(ID,fun,arg) thr_create(NULL,thread_stack_size,fun,arg,THR_DAEMON|THR_DETACHED,ID)
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define th_create_small(ID,fun,arg) thr_create(NULL,8192*sizeof(char *),fun,arg,THR_DAEMON|THR_DETACHED,ID)
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define th_exit(foo) thr_exit(foo)
#define th_self() thr_self()
|
ae7def | 1998-08-17 | Per Hedbor | | #define th_kill(ID,sig) thr_kill((ID),(sig))
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define th_yield() thr_yield()
|
6a64c3 | 1998-09-05 | Henrik Grubbström (Grubba) | | #define th_join(ID,res) thr_join((ID), NULL, (res))
|
97ffe4 | 1997-01-26 | Per Hedbor | |
#define COND_T cond_t
#define co_init(X) cond_init((X),USYNC_THREAD,0)
#define co_wait(COND, MUTEX) cond_wait((COND), (MUTEX))
#define co_signal(X) cond_signal(X)
#define co_broadcast(X) cond_broadcast(X)
#define co_destroy(X) cond_destroy(X)
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
#endif /* UNIX_THREADS */
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #ifdef SGI_SPROC_THREADS
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
#define THREAD_T int
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #define PIKE_MUTEX_T ulock_t
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #define mt_init(X) (usinitlock(((*X) = usnewlock(/*********/))))
#define mt_lock(X) ussetlock(*X)
#define mt_unlock(X) usunsetlock(*X)
#define mt_destroy(X) usfreelock((*X), /*******/)
#define th_setconcurrency(X) /*******/
#define PIKE_SPROC_FLAGS (PR_SADDR|PR_SFDS|PR_SDIR|PS_SETEXITSIG)
#define th_create(ID, fun, arg) (((*(ID)) = sproc(fun, PIKE_SPROC_FLAGS, arg)) == -1)
|
864d3c | 1998-01-29 | Fredrik Hübinette (Hubbe) | | #define th_create_small(ID, fun, arg) (((*(ID)) = sproc(fun, PIKE_SPROC_FLAGS, arg)) == -1)
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #define th_exit(X) exit(X)
#define th_self() getpid()
#define th_yield() sginap(0)
|
6a64c3 | 1998-09-05 | Henrik Grubbström (Grubba) | | #define th_join(ID,res) /*********/
|
d21327 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | #define th_equal(X,Y) ((X)==(Y))
#define th_hash(X) ((unsigned INT32)(X))
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
|
b2a0fb | 1997-02-06 | Henrik Grubbström (Grubba) | | #endif /* SGI_SPROC_THREADS */
|
97ffe4 | 1997-01-26 | Per Hedbor | |
|
a2db6b | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
#ifdef NT_THREADS
#include <process.h>
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | #include <windows.h>
|
a2db6b | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define THREAD_T unsigned
|
a2db6b | 1998-01-02 | Fredrik Hübinette (Hubbe) | | #define th_setconcurrency(X)
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #define th_create(ID,fun,arg) low_nt_create_thread(2*1024*1024,fun, arg,ID)
#define th_create_small(ID,fun,arg) low_nt_create_thread(8192*sizeof(char *), fun,arg,ID)
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define TH_RETURN_TYPE unsigned __stdcall
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #define TH_STDCALL __stdcall
#define th_exit(foo) _endthreadex(foo)
|
6a64c3 | 1998-09-05 | Henrik Grubbström (Grubba) | | #define th_join(ID,res) /******************* FIXME! ****************/
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define th_self() GetCurrentThreadId()
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #define th_destroy(X)
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | #define th_yield() Sleep(0)
|
d21327 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | #define th_equal(X,Y) ((X)==(Y))
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define th_hash(X) (X)
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #define PIKE_MUTEX_T HANDLE
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #define mt_init(X) CheckValidHandle((*(X)=CreateMutex(NULL, 0, NULL)))
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #define mt_lock(X) WaitForSingleObject(CheckValidHandle(*(X)), INFINITE)
#define mt_trylock(X) WaitForSingleObject(CheckValidHandle(*(X)), 0)
#define mt_unlock(X) ReleaseMutex(CheckValidHandle(*(X)))
#define mt_destroy(X) CloseHandle(CheckValidHandle(*(X)))
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
#define EVENT_T HANDLE
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #define event_init(X) CheckValidHandle(*(X)=CreateEvent(NULL, 1, 0, NULL))
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #define event_signal(X) SetEvent(CheckValidHandle(*(X)))
#define event_destroy(X) CloseHandle(CheckValidHandle(*(X)))
#define event_wait(X) WaitForSingleObject(CheckValidHandle(*(X)), INFINITE)
|
a2db6b | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
#endif
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #if !defined(COND_T) && defined(EVENT_T) && defined(PIKE_MUTEX_T)
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
#define SIMULATE_COND_WITH_EVENT
struct cond_t_queue
{
struct cond_t_queue *next;
EVENT_T event;
};
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | typedef struct cond_t_s
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | {
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | PIKE_MUTEX_T lock;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | struct cond_t_queue *head, *tail;
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | } COND_T;
#define COND_T struct cond_t_s
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #define co_init(X) do { mt_init(& (X)->lock), (X)->head=(X)->tail=0; }while(0)
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | int co_wait(COND_T *c, PIKE_MUTEX_T *m);
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | int co_signal(COND_T *c);
int co_broadcast(COND_T *c);
int co_destroy(COND_T *c);
#endif
|
b32ef1 | 2000-04-19 | Martin Stjernholm | | extern int th_running;
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | extern PIKE_MUTEX_T interpreter_lock;
|
97ffe4 | 1997-01-26 | Per Hedbor | |
|
c91f89 | 2000-04-19 | Martin Stjernholm | | #if defined(PIKE_DEBUG) && !defined(__NT__)
extern THREAD_T debug_locking_thread;
#define SET_LOCKING_THREAD (debug_locking_thread = th_self(), 0)
#define mt_lock_interpreter() (mt_lock(&interpreter_lock) || SET_LOCKING_THREAD)
#define mt_trylock_interpreter() (mt_trylock(&interpreter_lock) || SET_LOCKING_THREAD)
#define mt_unlock_interpreter() (mt_unlock(&interpreter_lock))
#define co_wait_interpreter(COND) \
do {co_wait((COND), &interpreter_lock); SET_LOCKING_THREAD;} while (0)
#define CHECK_INTERPRETER_LOCK() do { \
if (th_running) { \
THREAD_T self; \
if (!mt_trylock(&interpreter_lock)) \
fatal("Interpreter is not locked.\n"); \
self = th_self(); \
if (!th_equal(debug_locking_thread, self)) \
fatal("Interpreter is not locked by this thread.\n"); \
} \
} while (0)
#else
#define mt_lock_interpreter() (mt_lock(&interpreter_lock))
#define mt_trylock_interpreter() (mt_trylock(&interpreter_lock))
#define mt_unlock_interpreter() (mt_unlock(&interpreter_lock))
#define co_wait_interpreter(COND) do {co_wait((COND), &interpreter_lock);} while (0)
#define CHECK_INTERPRETER_LOCK() do {} while (0)
#endif
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | extern COND_T live_threads_change;
extern COND_T threads_disabled_change;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
struct svalue;
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct pike_frame;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | extern PIKE_MUTEX_T interleave_lock;
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | |
struct interleave_mutex
{
struct interleave_mutex *next;
struct interleave_mutex *prev;
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | PIKE_MUTEX_T lock;
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | };
#define IMUTEX_T struct interleave_mutex
#define DEFINE_IMUTEX(name) IMUTEX_T name
#define LOCK_IMUTEX(im) do { \
if (!threads_disabled) { \
THREADS_FPRINTF(0, (stderr, "Locking IMutex 0x%08p...\n", (im))); \
THREADS_ALLOW(); \
mt_lock(&((im)->lock)); \
THREADS_DISALLOW(); \
} \
} while(0)
#define UNLOCK_IMUTEX(im) do { \
if (!threads_disabled) { \
THREADS_FPRINTF(0, (stderr, "Unlocking IMutex 0x%08p...\n", (im))); \
mt_unlock(&((im)->lock)); \
} \
} while(0)
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | #define THREAD_NOT_STARTED -1
#define THREAD_RUNNING 0
#define THREAD_EXITED 1
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_SECURITY
extern struct object *current_creds;
#define DO_IF_SECURITY(X) X
#else
#define DO_IF_SECURITY(X)
#endif
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | struct thread_state {
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | char swapped;
char status;
COND_T status_change;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | THREAD_T id;
|
eac209 | 1998-02-27 | Marcus Comstedt | | struct thread_state *hashlink, **backlink;
|
d86cd7 | 1998-08-24 | Marcus Comstedt | | struct mapping *thread_local;
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | |
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | struct svalue *Pike_sp,*Pike_evaluator_stack;
struct svalue **Pike_mark_sp,**Pike_mark_stack;
struct pike_frame *Pike_fp;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | int evaluator_stack_malloced;
int mark_stack_malloced;
JMP_BUF *recoveries;
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | struct object * thread_id;
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | char *Pike_stack_top;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | DO_IF_SECURITY(struct object *current_creds;)
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | |
#ifdef PROFILING
#ifdef HAVE_GETHRTIME
long long accounted_time;
long long time_base;
#endif
#endif
|
78112c | 1998-04-13 | Henrik Grubbström (Grubba) | | #ifdef THREAD_TRACE
int t_flag;
#endif /* THREAD_TRACE */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | };
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #ifndef TH_RETURN_TYPE
#define TH_RETURN_TYPE void *
#endif
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #ifndef TH_STDCALL
#define TH_STDCALL
#endif
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | #ifndef th_destroy
#define th_destroy(X)
#endif
#ifndef th_yield
#define th_yield()
#endif
|
d21327 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | #ifndef th_equal
|
ce3194 | 1998-03-10 | Marcus Comstedt | | #define th_equal(X,Y) (!MEMCMP(&(X),&(Y),sizeof(THREAD_T)))
|
d21327 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | #endif
#ifndef th_hash
|
9f2dc0 | 1998-03-12 | Henrik Grubbström (Grubba) | | #define th_hash(X) hashmem((unsigned char *)&(X),sizeof(THREAD_T), 16)
|
d21327 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | #endif
|
60e6a6 | 1997-09-03 | Henrik Grubbström (Grubba) | |
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | |
|
60e6a6 | 1997-09-03 | Henrik Grubbström (Grubba) | |
#ifndef VERBOSE_THREADS_DEBUG
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | #define THREADS_FPRINTF(L,X)
|
60e6a6 | 1997-09-03 | Henrik Grubbström (Grubba) | | #else
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | #define THREADS_FPRINTF(L,X) do { \
if ((VERBOSE_THREADS_DEBUG + 0) >= (L)) fprintf X; \
} while(0)
|
60e6a6 | 1997-09-03 | Henrik Grubbström (Grubba) | | #endif /* VERBOSE_THREADS_DEBUG */
|
78112c | 1998-04-13 | Henrik Grubbström (Grubba) | | #ifdef THREAD_TRACE
#define SWAP_OUT_TRACE(_tmp) do { extern int t_flag; (_tmp)->t_flag = t_flag; } while(0)
#define SWAP_IN_TRACE(_tmp) do { extern int t_flag; t_flag = (_tmp)->t_flag; } while(0)
#else /* !THREAD_TRACE */
#define SWAP_OUT_TRACE(_tmp)
#define SWAP_IN_TRACE(_tmp)
#endif /* THREAD_TRACE */
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | | #if defined(PROFILING) && defined(HAVE_GETHRTIME)
|
2dbefd | 1998-11-20 | Fredrik Hübinette (Hubbe) | | #define DO_IF_PROFILING(X) X
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | | #else
#define DO_IF_PROFILING(X)
#endif
|
a7fef4 | 1997-09-03 | Per Hedbor | | #define SWAP_OUT_THREAD(_tmp) do { \
(_tmp)->swapped=1; \
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | (_tmp)->Pike_evaluator_stack=Pike_evaluator_stack;\
|
a7fef4 | 1997-09-03 | Per Hedbor | | (_tmp)->evaluator_stack_malloced=evaluator_stack_malloced;\
|
c82d3b | 2000-03-25 | Fredrik Hübinette (Hubbe) | | debug_malloc_pass( (_tmp)->Pike_fp=Pike_fp );\
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | (_tmp)->Pike_mark_sp=Pike_mark_sp;\
(_tmp)->Pike_mark_stack=Pike_mark_stack;\
|
a7fef4 | 1997-09-03 | Per Hedbor | | (_tmp)->mark_stack_malloced=mark_stack_malloced;\
(_tmp)->recoveries=recoveries;\
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | (_tmp)->Pike_sp=Pike_sp; \
(_tmp)->Pike_stack_top=Pike_stack_top; \
|
a7fef4 | 1997-09-03 | Per Hedbor | | (_tmp)->thread_id=thread_id;\
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | | DO_IF_PROFILING( (_tmp)->accounted_time=accounted_time; ) \
|
3e5b13 | 1998-11-19 | Fredrik Hübinette (Hubbe) | | DO_IF_PROFILING( (_tmp)->time_base = gethrtime() - time_base; ) \
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | DO_IF_SECURITY( (_tmp)->current_creds = current_creds ;) \
|
78112c | 1998-04-13 | Henrik Grubbström (Grubba) | | SWAP_OUT_TRACE(_tmp); \
|
a7fef4 | 1997-09-03 | Per Hedbor | | } while(0)
#define SWAP_IN_THREAD(_tmp) do {\
(_tmp)->swapped=0; \
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | Pike_evaluator_stack=(_tmp)->Pike_evaluator_stack;\
|
a7fef4 | 1997-09-03 | Per Hedbor | | evaluator_stack_malloced=(_tmp)->evaluator_stack_malloced;\
|
c82d3b | 2000-03-25 | Fredrik Hübinette (Hubbe) | | debug_malloc_pass( Pike_fp=(_tmp)->Pike_fp );\
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | Pike_mark_sp=(_tmp)->Pike_mark_sp;\
Pike_mark_stack=(_tmp)->Pike_mark_stack;\
|
a7fef4 | 1997-09-03 | Per Hedbor | | mark_stack_malloced=(_tmp)->mark_stack_malloced;\
recoveries=(_tmp)->recoveries;\
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | Pike_sp=(_tmp)->Pike_sp;\
Pike_stack_top=(_tmp)->Pike_stack_top;\
|
a7fef4 | 1997-09-03 | Per Hedbor | | thread_id=(_tmp)->thread_id;\
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | | DO_IF_PROFILING( accounted_time=(_tmp)->accounted_time; ) \
|
809d7c | 1998-11-20 | Fredrik Hübinette (Hubbe) | | DO_IF_PROFILING( time_base = gethrtime() - (_tmp)->time_base; ) \
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | DO_IF_SECURITY( current_creds = (_tmp)->current_creds ;) \
|
78112c | 1998-04-13 | Henrik Grubbström (Grubba) | | SWAP_IN_TRACE(_tmp); \
|
a7fef4 | 1997-09-03 | Per Hedbor | | } while(0)
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | | #define SWAP_OUT_CURRENT_THREAD() \
do {\
|
9b92d3 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=OBJ2THREAD(thread_id); \
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | | SWAP_OUT_THREAD(_tmp); \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "SWAP_OUT_CURRENT_THREAD() %s:%d t:%08x\n", \
__FILE__, __LINE__, (unsigned int)_tmp->thread_id)) \
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | |
#define SWAP_IN_CURRENT_THREAD() \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "SWAP_IN_CURRENT_THREAD() %s:%d ... t:%08x\n", \
__FILE__, __LINE__, (unsigned int)_tmp->thread_id)); \
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | | SWAP_IN_THREAD(_tmp);\
} while(0)
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #if defined(PIKE_DEBUG) && ! defined(DONT_HIDE_GLOBALS)
|
d81860 | 1997-10-21 | Henrik Grubbström (Grubba) | |
#define HIDE_GLOBAL_VARIABLES() do { \
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | int Pike_sp = 0, Pike_evaluator_stack = 0, Pike_mark_sp = 0, Pike_mark_stack = 0, Pike_fp = 0; \
|
d81860 | 1997-10-21 | Henrik Grubbström (Grubba) | | void *evaluator_stack_malloced = NULL, *mark_stack_malloced = NULL; \
|
a35bbd | 1997-10-21 | Henrik Grubbström (Grubba) | | int recoveries = 0, thread_id = 0; \
|
0e6f4b | 2000-02-20 | Fredrik Hübinette (Hubbe) | | int pop_n_elems = 0; \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | int push_sp_mark = 0, pop_sp_mark = 0, threads_disabled = 1
|
d81860 | 1997-10-21 | Henrik Grubbström (Grubba) | |
|
602f69 | 1997-10-25 | Henrik Grubbström (Grubba) | |
#define REVEAL_GLOBAL_VARIABLES() ; } while(0)
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #else /* PIKE_DEBUG */
|
d81860 | 1997-10-21 | Henrik Grubbström (Grubba) | | #define HIDE_GLOBAL_VARIABLES()
#define REVEAL_GLOBAL_VARIABLES()
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #endif /* PIKE_DEBUG */
|
9b92d3 | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
#define OBJ2THREAD(X) \
((struct thread_state *)((X)->storage+thread_storage_offset))
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | |
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #define THREADSTATE2OBJ(X) BASEOF((X),object,storage[thread_storage_offset])
|
602f69 | 1997-10-25 | Henrik Grubbström (Grubba) | | #define THREADS_ALLOW() do { \
|
9b92d3 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=OBJ2THREAD(thread_id); \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | DO_IF_DEBUG({ \
|
7bf623 | 2000-04-23 | Martin Stjernholm | | extern int Pike_in_gc; \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | if(thread_for_id(th_self()) != thread_id) \
fatal("thread_for_id() (or thread_id) failed! %p != %p\n",thread_for_id(th_self()),thread_id); \
|
131256 | 2000-04-26 | Martin Stjernholm | | if (Pike_in_gc > 50 && Pike_in_gc <= 200) \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | fatal("Threads allowed during garbage collection.\n"); \
}) \
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | if(num_threads > 1 && !threads_disabled) { \
|
a7fef4 | 1997-09-03 | Per Hedbor | | SWAP_OUT_THREAD(_tmp); \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "THREADS_ALLOW() %s:%d t:%08x(#%d)\n", \
__FILE__, __LINE__, \
(unsigned int)_tmp->thread_id, live_threads)); \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | mt_unlock_interpreter(); \
|
602f69 | 1997-10-25 | Henrik Grubbström (Grubba) | | } else {} \
HIDE_GLOBAL_VARIABLES()
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
#define THREADS_DISALLOW() \
|
d81860 | 1997-10-21 | Henrik Grubbström (Grubba) | | REVEAL_GLOBAL_VARIABLES(); \
|
a7fef4 | 1997-09-03 | Per Hedbor | | if(_tmp->swapped) { \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | mt_lock_interpreter(); \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "THREADS_DISALLOW() %s:%d t:%08x(#%d)\n", \
__FILE__, __LINE__, \
(unsigned int)_tmp->thread_id, live_threads)); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | while (threads_disabled) { \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, \
"THREADS_DISALLOW(): Threads disabled\n")); \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | co_wait_interpreter(&threads_disabled_change); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | } \
|
a7fef4 | 1997-09-03 | Per Hedbor | | SWAP_IN_THREAD(_tmp);\
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | } \
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | DO_IF_DEBUG( if(thread_for_id(th_self()) != thread_id) \
fatal("thread_for_id() (or thread_id) failed! %p != %p\n",thread_for_id(th_self()),thread_id) ; ) \
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | } while(0)
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | #define THREADS_ALLOW_UID() do { \
|
9b92d3 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp_uid=OBJ2THREAD(thread_id); \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | DO_IF_DEBUG({ \
|
7bf623 | 2000-04-23 | Martin Stjernholm | | extern int Pike_in_gc; \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | if(thread_for_id(th_self()) != thread_id) \
fatal("thread_for_id() (or thread_id) failed! %p != %p\n",thread_for_id(th_self()),thread_id); \
|
131256 | 2000-04-26 | Martin Stjernholm | | if (Pike_in_gc > 50 && Pike_in_gc <= 200) \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | fatal("Threads allowed during garbage collection.\n"); \
}) \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | if(num_threads > 1 && !threads_disabled) { \
SWAP_OUT_THREAD(_tmp_uid); \
live_threads++; \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "THREADS_ALLOW_UID() %s:%d t:%08x(#%d)\n", \
__FILE__, __LINE__, \
(unsigned int)_tmp_uid->thread_id, live_threads)); \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | mt_unlock_interpreter(); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | } else {} \
HIDE_GLOBAL_VARIABLES()
#define THREADS_DISALLOW_UID() \
REVEAL_GLOBAL_VARIABLES(); \
if(_tmp_uid->swapped) { \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | mt_lock_interpreter(); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | live_threads--; \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, \
"THREADS_DISALLOW_UID() %s:%d t:%08x(#%d)\n", \
__FILE__, __LINE__, \
(unsigned int)_tmp_uid->thread_id, live_threads)); \
|
72fdae | 1998-07-05 | Henrik Grubbström (Grubba) | | co_broadcast(&live_threads_change); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | while (threads_disabled) { \
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | THREADS_FPRINTF(1, (stderr, "THREADS_DISALLOW_UID(): Wait...\n")); \
|
c91f89 | 2000-04-19 | Martin Stjernholm | | co_wait_interpreter(&threads_disabled_change); \
|
ef1e93 | 1998-03-26 | Henrik Grubbström (Grubba) | | } \
SWAP_IN_THREAD(_tmp_uid);\
} \
} while(0)
|
db40ab | 1999-04-15 | Fredrik Hübinette (Hubbe) | | #define SWAP_IN_THREAD_IF_REQUIRED() do { \
struct thread_state *_tmp=thread_state_for_id(th_self()); \
HIDE_GLOBAL_VARIABLES(); \
THREADS_DISALLOW()
#ifdef PIKE_DEBUG
|
b32ef1 | 2000-04-19 | Martin Stjernholm | | #define ASSERT_THREAD_SWAPPED_IN() do { \
struct thread_state *_tmp=thread_state_for_id(th_self()); \
if(_tmp->swapped) fatal("Thread is not swapped in!\n"); \
|
db40ab | 1999-04-15 | Fredrik Hübinette (Hubbe) | | }while(0)
#else
#define ASSERT_THREAD_SWAPPED_IN()
#endif
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | int low_nt_create_thread(unsigned Pike_stack_size,
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | unsigned (TH_STDCALL *func)(void *),
void *arg,
unsigned *id);
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | struct thread_starter;
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | struct thread_local;
void low_init_threads_disable(void);
void init_threads_disable(struct object *o);
void exit_threads_disable(struct object *o);
void init_interleave_mutex(IMUTEX_T *im);
void exit_interleave_mutex(IMUTEX_T *im);
void thread_table_init(void);
unsigned INT32 thread_table_hash(THREAD_T *tid);
void thread_table_insert(struct object *o);
void thread_table_delete(struct object *o);
struct thread_state *thread_state_for_id(THREAD_T tid);
struct object *thread_for_id(THREAD_T tid);
void f_all_threads(INT32 args);
|
56ac10 | 2000-03-29 | Fredrik Hübinette (Hubbe) | | int count_pike_threads(void);
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | TH_RETURN_TYPE new_thread_func(void * data);
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | void f_thread_create(INT32 args);
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | void f_thread_set_concurrency(INT32 args);
|
a29e02 | 1996-10-15 | Fredrik Hübinette (Hubbe) | | void f_this_thread(INT32 args);
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | struct mutex_storage;
struct key_storage;
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | void f_mutex_lock(INT32 args);
void f_mutex_trylock(INT32 args);
void init_mutex_obj(struct object *o);
void exit_mutex_obj(struct object *o);
void init_mutex_key_obj(struct object *o);
void exit_mutex_key_obj(struct object *o);
void f_cond_wait(INT32 args);
void f_cond_signal(INT32 args);
void f_cond_broadcast(INT32 args);
void init_cond_obj(struct object *o);
void exit_cond_obj(struct object *o);
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | void f_thread_backtrace(INT32 args);
void f_thread_id_status(INT32 args);
void init_thread_obj(struct object *o);
void exit_thread_obj(struct object *o);
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | void f_thread_local(INT32 args);
void f_thread_local_get(INT32 args);
void f_thread_local_set(INT32 args);
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | void low_th_init(void);
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | void th_init(void);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void th_cleanup(void);
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | int th_num_idle_farmers(void);
int th_num_farmers();
void th_farm(void (*fun)(void *), void *here);
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
#else
|
199425 | 1999-09-06 | Fredrik Hübinette (Hubbe) | |
#define th_atfork(X,Y,Z)
#define th_atfork_prepare()
#define th_atfork_parent()
#define th_atfork_child()
|
97ffe4 | 1997-01-26 | Per Hedbor | | #define th_setconcurrency(X)
|
419ede | 1996-11-13 | Fredrik Hübinette (Hubbe) | | #define DEFINE_MUTEX(X)
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | #define DEFINE_IMUTEX(X)
#define init_interleave_mutex(X)
#define LOCK_IMUTEX(X)
#define UNLOCK_IMUTEX(X)
|
051688 | 1996-10-04 | David Hedbor | | #define mt_init(X)
#define mt_lock(X)
#define mt_unlock(X)
|
419ede | 1996-11-13 | Fredrik Hübinette (Hubbe) | | #define mt_destroy(X)
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define THREADS_ALLOW()
#define THREADS_DISALLOW()
|
a1ad42 | 1998-03-27 | Fredrik Hübinette (Hubbe) | | #define THREADS_ALLOW_UID()
#define THREADS_DISALLOW_UID()
|
43306a | 1997-10-21 | Henrik Grubbström (Grubba) | | #define HIDE_GLOBAL_VARIABLES()
#define REVEAL_GLOBAL_VARIABLES()
|
db40ab | 1999-04-15 | Fredrik Hübinette (Hubbe) | | #define ASSERT_THREAD_SWAPPED_IN()
#define SWAP_IN_THREAD_IF_REQUIRED()
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define th_init()
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | | #define low_th_init()
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | #define th_cleanup()
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #define th_init_programs()
|
fc3345 | 1997-10-02 | Fredrik Hübinette (Hubbe) | | #define th_self() ((void*)0)
|
2bfcfe | 1998-03-27 | Fredrik Hübinette (Hubbe) | | #define co_signal(X)
|
a872b2 | 1998-04-30 | Fredrik Hübinette (Hubbe) | | #define co_broadcast(X)
|
98759d | 1998-06-25 | Henrik Grubbström (Grubba) | |
|
f328f1 | 1998-07-17 | Henrik Grubbström (Grubba) | | #define low_init_threads_disable()
|
98759d | 1998-06-25 | Henrik Grubbström (Grubba) | | #define init_threads_disable(X)
#define exit_threads_disable(X)
|
53ffab | 1999-08-10 | Martin Stjernholm | | #endif /* PIKE_THREADS */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #ifndef PIKE_DEBUG
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | #define CheckValidHandle(X) (X)
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #else
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | HANDLE CheckValidHandle(HANDLE h);
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | | #endif
#endif
|
051688 | 1996-10-04 | David Hedbor | |
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | extern int threads_disabled;
|
9b92d3 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | extern int thread_storage_offset;
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | |
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | | #ifndef NO_PIKE_SHORTHAND
#define MUTEX_T PIKE_MUTEX_T
#endif
|
d3015d | 2000-04-18 | Jonas Wallden | |
#ifdef PTHREAD_MUTEX_INITIALIZER
#define STATIC_MUTEX_INIT = PTHREAD_MUTEX_INITIALIZER
#else
#define STATIC_MUTEX_INIT
#endif
#ifdef PTHREAD_COND_INITIALIZER
#define STATIC_COND_INIT = PTHREAD_COND_INITIALIZER
#else
#define STATIC_COND_INIT
#endif
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #endif /* THREADS_H */
|