(*o == SCM_I_PTHREAD_ONCE_INIT) { *o = SCM_I_PTHREAD_ONCE_ALREADY; init (); } return 0; } /* Thread specific storage */ typedef struct scm_i_pthread_key_t { struct scm_i_pthread_key_t *next; void *value; void (*destr_func) (void *); } scm_i_pthread_key_t; SCM_API int scm_i_pthread_key_create (scm_i_pthread_key_t *key, void (*destr_func) (void *)); #define scm_i_pthread_setspecific(k,p) ((k).value = (p)) #define scm_i_pthread_getspecific(k) ((k).value) /* Convenience functions */ #define scm_i_scm_pthread_mutex_lock scm_i_pthread_mutex_lock #define scm_i_dynwind_pthread_mutex_lock scm_i_pthread_mutex_lock #define scm_i_scm_pthread_cond_wait scm_i_pthread_cond_wait #define scm_i_scm_pthread_cond_timedwait scm_i_pthread_cond_timedwait #endif /* SCM_NULL_THREADS_H */