1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

See ChangeLog from 2005-03-02.

This commit is contained in:
Marius Vollmer 2005-03-02 20:42:01 +00:00
parent cb1cfc42a4
commit 9de87eea47
67 changed files with 3044 additions and 2606 deletions

View file

@ -3,7 +3,7 @@
#ifndef SCM_NULL_THREADS_H
#define SCM_NULL_THREADS_H
/* Copyright (C) 2002 Free Software Foundation, Inc.
/* Copyright (C) 2005 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,101 +22,81 @@
/* The null-threads implementation. We provide the standard API, but
no new threads can be created.
/* The null-threads implementation. We provide the subset of the
standard pthread API that is used by Guile, but no new threads can
be created.
This file merely exits so that Guile can be compiled and run
without using pthreads. Improving performance via optimizations
that are possible in a single-threaded program is not a primary
goal.
*/
#error temporarily broken, compile with threads enabled (default option)
#include <errno.h>
/* We can't switch so don't bother trying.
/* Threads
*/
#undef SCM_THREAD_SWITCHING_CODE
#define SCM_THREAD_SWITCHING_CODE
#define scm_i_pthread_t int
#define scm_i_pthread_self() 0
#define scm_i_pthread_create(t,a,f,d) (*(t)=0, (void)(f), ENOSYS)
#define scm_i_pthread_detach(t) do { } while (0)
#define scm_i_pthread_exit(v) exit(0)
#define scm_i_sched_yield() 0
#define scm_t_thread int
/* Signals
*/
#define scm_i_pthread_sigmask sigprocmask
/* The "(void)(...)" constructs in the expansions are there to ensure
that the side effects of the argument expressions take place.
*/
/* Mutexes
*/
#define SCM_I_PTHREAD_MUTEX_INITIALIZER 0
#define SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER 0
#define scm_i_pthread_mutex_t int
#define scm_i_pthread_mutex_init(m,a) (*(m) = 0)
#define scm_i_pthread_mutex_destroy(m) do { (void)(m); } while(0)
#define scm_i_pthread_mutex_trylock(m) ((*(m))++)
#define scm_i_pthread_mutex_lock(m) ((*(m))++)
#define scm_i_pthread_mutex_unlock(m) ((*(m))--)
#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
/* Condition variables
*/
#define SCM_I_PTHREAD_COND_INITIALIZER 0
#define scm_i_pthread_cond_t int
#define scm_i_pthread_cond_init(c,a) (*(c) = 0)
#define scm_i_pthread_cond_destroy(c) do { (void)(c); } while(0)
#define scm_i_pthread_cond_signal(c) (*(c) = 1)
#define scm_i_pthread_cond_broadcast(c) (*(c) = 1)
#define scm_i_pthread_cond_wait(c,m) (abort(), 0)
#define scm_i_pthread_cond_timedwait(c,m,t) (abort(), 0)
#define scm_t_mutex int
/* Onces
*/
#define scm_i_pthread_once_t int
#define SCM_I_PTHREAD_ONCE_INIT 0
#define scm_i_pthread_once(o,f) do { \
if(!*(o)) { *(o)=1; f (); } \
} while(0)
#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)
/* 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;
#define scm_t_cond int
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)
#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)
/* Convenience functions
*/
#define scm_i_scm_pthread_mutex_lock scm_i_pthread_mutex_lock
#define scm_i_frame_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
#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,
scm_t_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);
#endif
#endif /* SCM_NULL_THREADS_H */