24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | | |
4803fa | 2002-09-14 | Martin Stjernholm | | * $Id: threads.h,v 1.116 2002/09/14 03:03:05 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"
|
a7fef4 | 1997-09-03 | Per Hedbor | | #include "object.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #include "interpret.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) | |
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | |
#ifdef fp
#undef fp
#define FRAMEPOINTER_WAS_DEFINED
#endif /* fp */
|
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>
|
956f9a | 2000-07-30 | Fredrik Hübinette (Hubbe) | |
#undef func_data
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #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 | |
|
00b32e | 2000-07-07 | Henrik Grubbström (Grubba) | |
#ifdef FRAMEPOINTER_WAS_DEFINED
#define fp Pike_fp
#undef FRAMEPOINTER_WAS_DEFINED
#endif /* FRAMEPOINTER_WAS_DEFINED */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | extern int num_threads;
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern int live_threads;
|
6d1a5e | 1996-10-07 | Fredrik Hübinette (Hubbe) | | struct object;
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern size_t thread_stack_size;
|
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)
|
39e56c | 2000-10-25 | Fredrik Hübinette (Hubbe) | |
#if !defined(HAVE_PTHREAD_MUTEX_RECURSIVE_NP) && defined(HAVE_PTHREAD_MUTEX_RECURSIVE)
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
#define HAVE_PTHREAD_MUTEX_RECURSIVE_NP
#endif
#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE_NP
#define mt_init_recursive(X) \
do{ \
pthread_mutexattr_t attr; \
pthread_mutexattr_init(&attr); \
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); \
pthread_mutex_init((X), &attr); \
}while(0)
#endif
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #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()
#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()
|
39e56c | 2000-10-25 | Fredrik Hübinette (Hubbe) | |
#define TH_KEY_T pthread_key_t
#define th_key_create pthread_key_create
#define th_setspecific pthread_setspecific
#define th_getpecific pthread_getspecific
|
401eb0 | 2000-10-03 | Henrik Grubbström (Grubba) | | #ifdef HAVE_PTHREAD_KILL
|
ae7def | 1998-08-17 | Per Hedbor | | #define th_kill(ID,sig) pthread_kill((ID),(sig))
|
401eb0 | 2000-10-03 | Henrik Grubbström (Grubba) | | #else /* !HAVE_PTHREAD_KILL */
#define th_kill(ID,sig)
#endif /* HAVE_PTHREAD_KILL */
|
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
|
a4a172 | 2000-12-05 | Per Hedbor | | #error No way to make cond-vars
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #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) | |
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT int co_wait(COND_T *c, PIKE_MUTEX_T *m);
PMOD_EXPORT int co_signal(COND_T *c);
PMOD_EXPORT int co_broadcast(COND_T *c);
PMOD_EXPORT int co_destroy(COND_T *c);
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
#endif
|
b32ef1 | 2000-04-19 | Martin Stjernholm | | extern int th_running;
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | |
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT 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)
#endif
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern COND_T live_threads_change;
PMOD_EXPORT 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
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state {
struct Pike_interpreter state;
char swapped;
char status;
COND_T status_change;
THREAD_T id;
struct mapping *thread_local;
struct thread_state *hashlink, **backlink;
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | | #ifdef PROFILING
|
e7ca3f | 2001-08-29 | Martin Stjernholm | | #if SIZEOF_LONG_LONG - 0 != 0
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | | long long time_base;
|
e7ca3f | 2001-08-29 | Martin Stjernholm | | #else
long time_base;
#endif
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | | #endif /* PROFILING */
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | };
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | |
|
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
|
4803fa | 2002-09-14 | Martin Stjernholm | | #ifdef HAVE_THR_YIELD
#define th_yield() thr_yield()
#else
#define th_yield() 0
#define HAVE_NO_YIELD
#endif
|
e42eaf | 1998-01-02 | Fredrik Hübinette (Hubbe) | | #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
|
c86ef2 | 2002-09-14 | Martin Stjernholm | | #if !defined(HAVE_GETHRTIME) && defined(HAVE_CLOCK)
#ifdef HAVE_TIME_H
#include <time.h>
#endif
PMOD_EXPORT extern clock_t thread_start_clock;
#define USE_CLOCK_FOR_SLICES
#define DO_IF_USE_CLOCK_FOR_SLICES(X) X
#else
#define DO_IF_USE_CLOCK_FOR_SLICES(X)
#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
|
6f0d75 | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern int t_flag;
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | #define SWAP_OUT_TRACE(_tmp) do { (_tmp)->status.t_flag = t_flag; } while(0)
#define SWAP_IN_TRACE(_tmp) do { t_flag = (_tmp)->status.t_flag; } while(0)
|
78112c | 1998-04-13 | Henrik Grubbström (Grubba) | | #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
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #define SWAP_OUT_THREAD(_tmp) do { \
(_tmp)->state=Pike_interpreter; \
(_tmp)->swapped=1; \
DO_IF_PROFILING( (_tmp)->time_base += gethrtime() ; ) \
|
a7fef4 | 1997-09-03 | Per Hedbor | | } while(0)
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #define SWAP_IN_THREAD(_tmp) do { \
(_tmp)->swapped=0; \
Pike_interpreter=(_tmp)->state; \
|
c86ef2 | 2002-09-14 | Martin Stjernholm | | DO_IF_USE_CLOCK_FOR_SLICES (thread_start_clock = 0); \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | DO_IF_PROFILING( Pike_interpreter.time_base -= gethrtime();) \
|
a7fef4 | 1997-09-03 | Per Hedbor | | } while(0)
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | | #define SWAP_OUT_CURRENT_THREAD() \
do {\
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=OBJ2THREAD(Pike_interpreter.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 { \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | int Pike_interpreter =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) \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | ((struct thread_state *)((X)->storage+thread_storage_offset))
|
2d9cbe | 1997-09-08 | Fredrik Hübinette (Hubbe) | |
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #define THREADSTATE2OBJ(X) ((X)->state.thread_id)
|
26cd94 | 1999-05-07 | Fredrik Hübinette (Hubbe) | |
|
6f0d75 | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern int Pike_in_gc;
|
602f69 | 1997-10-25 | Henrik Grubbström (Grubba) | | #define THREADS_ALLOW() do { \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=OBJ2THREAD(Pike_interpreter.thread_id); \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | DO_IF_DEBUG({ \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | if(thread_for_id(th_self()) != Pike_interpreter.thread_id) \
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | | fatal("thread_for_id() (or Pike_interpreter.thread_id) failed!" \
" %p != %p\n", \
thread_for_id(th_self()), Pike_interpreter.thread_id); \
|
6a22d0 | 2000-06-10 | Martin Stjernholm | | if (Pike_in_gc > 50 && Pike_in_gc < 300) \
|
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) | | } \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | DO_IF_DEBUG( if(thread_for_id(th_self()) != Pike_interpreter.thread_id) \
fatal("thread_for_id() (or Pike_interpreter.thread_id) failed! %p != %p\n",thread_for_id(th_self()),Pike_interpreter.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 { \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp_uid=OBJ2THREAD(Pike_interpreter.thread_id); \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | DO_IF_DEBUG({ \
|
64ce89 | 2000-08-07 | Henrik Grubbström (Grubba) | | if(thread_for_id(th_self()) != Pike_interpreter.thread_id) { \
fatal("thread_for_id() (or Pike_interpreter.thread_id) failed! %p != %p\n", \
thread_for_id(th_self()),Pike_interpreter.thread_id); \
} \
if ((Pike_in_gc > 50) && (Pike_in_gc < 300)) { \
|
a4a172 | 2000-12-05 | Per Hedbor | | fprintf(stderr, __FILE__ ":" DEFINETOSTR(__LINE__) ": Fatal error:\n"); \
|
64ce89 | 2000-08-07 | Henrik Grubbström (Grubba) | | debug_fatal("Threads allowed during garbage collection (%d).\n", \
Pike_in_gc); \
} \
|
6bc62b | 2000-04-14 | Martin Stjernholm | | }) \
|
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 { \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=thread_state_for_id(th_self()); \
|
db40ab | 1999-04-15 | Fredrik Hübinette (Hubbe) | | HIDE_GLOBAL_VARIABLES(); \
THREADS_DISALLOW()
#ifdef PIKE_DEBUG
|
b32ef1 | 2000-04-19 | Martin Stjernholm | | #define ASSERT_THREAD_SWAPPED_IN() do { \
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct thread_state *_tmp=thread_state_for_id(th_self()); \
|
b32ef1 | 2000-04-19 | Martin Stjernholm | | 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);
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT void thread_table_insert(struct object *o);
PMOD_EXPORT void thread_table_delete(struct object *o);
PMOD_EXPORT struct thread_state *thread_state_for_id(THREAD_T tid);
PMOD_EXPORT struct object *thread_for_id(THREAD_T tid);
PMOD_EXPORT void f_all_threads(INT32 args);
PMOD_EXPORT 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);
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT 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);
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT void f_thread_local(INT32 args);
|
cd67ac | 1999-05-11 | Fredrik Hübinette (Hubbe) | | 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);
|
99a5a6 | 2000-08-06 | David Hedbor | | int th_num_farmers(void);
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT 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)
|
3b44f8 | 2000-07-11 | David Hedbor | | #define THREADS_ALLOW()
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #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)
|
8f9e67 | 2001-10-23 | Martin Stjernholm | | #define co_wait(X,Y)
|
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)
|
b377d7 | 2000-07-07 | Henrik Grubbström (Grubba) | |
|
53ffab | 1999-08-10 | Martin Stjernholm | | #endif /* PIKE_THREADS */
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | |
|
e8b82a | 2000-04-26 | Martin Stjernholm | | #ifndef CHECK_INTERPRETER_LOCK
#define CHECK_INTERPRETER_LOCK() do {} while (0)
#endif
|
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
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT 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;
|
d6896c | 2000-12-16 | Marcus Comstedt | | PMOD_EXPORT extern ptrdiff_t thread_storage_offset;
PMOD_EXPORT extern struct program *thread_id_prog;
|
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
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | |
#include "interpret.h"
|
d3015d | 2000-04-18 | Jonas Wallden | |
|
5377b9 | 1997-02-01 | Henrik Grubbström (Grubba) | | #endif /* THREADS_H */
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | |
|