diff options
Diffstat (limited to 'libguile/null-threads.h')
-rw-r--r-- | libguile/null-threads.h | 97 |
1 files changed, 89 insertions, 8 deletions
diff --git a/libguile/null-threads.h b/libguile/null-threads.h index a34fafbdf..40eaa4292 100644 --- a/libguile/null-threads.h +++ b/libguile/null-threads.h @@ -1,7 +1,7 @@ /* classes: h_files */ -#ifndef SCM_NULL_DEFS_H -#define SCM_NULL_DEFS_H +#ifndef SCM_NULL_THREADS_H +#define SCM_NULL_THREADS_H /* Copyright (C) 2002 Free Software Foundation, Inc. * @@ -50,16 +50,97 @@ no new threads can be created. */ -#define SCM_CRITICAL_SECTION_START -#define SCM_CRITICAL_SECTION_END +/* We can't switch so don't bother trying. +*/ +#undef SCM_THREAD_SWITCHING_CODE #define SCM_THREAD_SWITCHING_CODE -SCM_API void *scm_null_threads_data; +#define scm_t_thread int + +/* The "(void)(...)" constructs in the expansions are there to ensure + that the side effects of the argument expressions take place. +*/ + +#define scm_thread_create(th,proc,data) ((void)(proc), (void)(data), ENOTSUP) +#define scm_thread_join(th) do { (void)(th); abort(); } while(0) +#define scm_thread_detach(th) do { (void)(th); abort(); } while(0) +#define scm_thread_self() 0 + +#define scm_t_mutex int + +#define scm_mutex_init(mx) do { (void)(mx); } while(0) +#define scm_mutex_destroy(mx) do { (void)(mx); } while(0) +#define scm_mutex_lock(mx) do { (void)(mx); } while(0) +#define scm_mutex_trylock(mx) ((void)(mx), 1) +#define scm_mutex_unlock(mx) do { (void)(mx); } while(0) + +#define scm_t_cond int + +#define scm_cond_init(cv) do { (void)(cv); } while(0) +#define scm_cond_destroy(cv) do { (void)(cv); } while(0) +#define scm_cond_wait(cv,mx) ((void)(cv), (void)(mx), ENOTSUP) +#define scm_cond_timedwait(cv,mx,at) ((void)(cv), (void)(mx), (void)(at), \ + ENOTSUP) +#define scm_cond_signal(cv) do { (void)(cv); } while(0) +#define scm_cond_broadcast(cv) do { (void)(cv); } while(0) + +#define scm_thread_select select + +typedef void **scm_t_key; + +#define scm_key_create(keyp) do { *(keyp) = malloc(sizeof(void*)); \ + } while(0) +#define scm_key_delete(key) do { free(key); } while(0) +#define scm_key_setspecific(key, value) do { *(key) = (value); } while(0) +#define scm_key_getspecific(key) *(key) + +#if 0 + +/* These are the actual prototypes of the functions/macros defined + above. We list them here for reference. */ + +typedef int scm_t_thread; + +SCM_API int scm_thread_create (scm_t_thread *th, + void (*proc) (void *), void *data); +SCM_API void scm_thread_join (scm_t_thread th); +SCM_API void scm_thread_detach (scm_t_thread th); +SCM_API scm_t_thread scm_thread_self (void); + +typedef int scm_t_mutex; + +SCM_API void scm_mutex_init (scm_t_mutex *mx); +SCM_API void scm_mutex_destroy (scm_t_mutex *mx); +SCM_API void scm_mutex_lock (scm_t_mutex *mx); +SCM_API int scm_mutex_trylock (scm_t_mutex *mx); +SCM_API void scm_mutex_unlock (scm_t_mutex *mx); + +typedef int scm_t_cond; + +SCM_API void scm_cond_init (scm_t_cond *cv); +SCM_API void scm_cond_destroy (scm_t_cond *cv); +SCM_API void scm_cond_wait (scm_t_cond *cv, scm_t_mutex *mx); +SCM_API int scm_cond_timedwait (scm_t_cond *cv, scm_t_mutex *mx, + struct timespec *abstime); +SCM_API void scm_cond_signal (scm_t_cond *cv); +SCM_API void scm_cond_broadcast (scm_t_cond *cv); + +typedef int scm_t_key; + +SCM_API void scm_key_create (scm_t_key *keyp); +SCM_API void scm_key_delete (scm_t_key key); +SCM_API void scm_key_setspecific (scm_t_key key, const void *value); +SCM_API void *scm_key_getspecific (scm_t_key key); + +SCM_API int scm_thread_select (int nfds, + SELECT_TYPE *readfds, + SELECT_TYPE *writefds, + SELECT_TYPE *exceptfds, + struct timeval *timeout); -#define SCM_THREAD_LOCAL_DATA (scm_null_threads_data) -#define SCM_SET_THREAD_LOCAL_DATA(ptr) (scm_null_threads_data = (ptr)) +#endif -#endif /* SCM_NULL_DEFS_H */ +#endif /* SCM_NULL_THREADS_H */ /* Local Variables: |