mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
* null-threads.h, pthread-threads.h
(SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER): Removed. (scm_i_pthread_mutexattr_recursive): New. * threads.c (scm_i_pthread_mutexattr_recursive): Declare. (scm_i_critical_section_mutex): Do not initialize statically. (scm_threads_prehistory): Initialize scm_i_pthread_mutexattr_recursive and scm_i_critical_section_mutex here. * eval.c (source_mutex): Do not initialiaze statically. (scm_init_eval): Do it here, using scm_i_pthread_mutexattr_recursive.
This commit is contained in:
parent
777f2ed60a
commit
d1138028c9
4 changed files with 19 additions and 6 deletions
|
@ -2655,7 +2655,7 @@ static SCM deval (SCM x, SCM env);
|
||||||
? SCM_CAR (x) \
|
? SCM_CAR (x) \
|
||||||
: *scm_lookupcar ((x), (env), 1)))))
|
: *scm_lookupcar ((x), (env), 1)))))
|
||||||
|
|
||||||
scm_i_pthread_mutex_t source_mutex = SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
|
scm_i_pthread_mutex_t source_mutex;
|
||||||
|
|
||||||
|
|
||||||
/* Lookup a given local variable in an environment. The local variable is
|
/* Lookup a given local variable in an environment. The local variable is
|
||||||
|
@ -6022,6 +6022,9 @@ SCM (*scm_ceval_ptr) (SCM x, SCM env) = dispatching_eval;
|
||||||
void
|
void
|
||||||
scm_init_eval ()
|
scm_init_eval ()
|
||||||
{
|
{
|
||||||
|
scm_i_pthread_mutex_init (&source_mutex,
|
||||||
|
scm_i_pthread_mutexattr_recursive);
|
||||||
|
|
||||||
scm_init_opts (scm_evaluator_traps,
|
scm_init_opts (scm_evaluator_traps,
|
||||||
scm_evaluator_trap_table,
|
scm_evaluator_trap_table,
|
||||||
SCM_N_EVALUATOR_TRAPS);
|
SCM_N_EVALUATOR_TRAPS);
|
||||||
|
|
|
@ -50,13 +50,13 @@
|
||||||
/* Mutexes
|
/* Mutexes
|
||||||
*/
|
*/
|
||||||
#define SCM_I_PTHREAD_MUTEX_INITIALIZER 0
|
#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_t int
|
||||||
#define scm_i_pthread_mutex_init(m,a) (*(m) = 0)
|
#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_destroy(m) do { (void)(m); } while(0)
|
||||||
#define scm_i_pthread_mutex_trylock(m) ((*(m))++)
|
#define scm_i_pthread_mutex_trylock(m) ((*(m))++)
|
||||||
#define scm_i_pthread_mutex_lock(m) ((*(m))++)
|
#define scm_i_pthread_mutex_lock(m) ((*(m))++)
|
||||||
#define scm_i_pthread_mutex_unlock(m) ((*(m))--)
|
#define scm_i_pthread_mutex_unlock(m) ((*(m))--)
|
||||||
|
#define scm_i_pthread_mutexattr_recursive 0
|
||||||
|
|
||||||
/* Condition variables
|
/* Condition variables
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -44,14 +44,13 @@
|
||||||
/* Mutexes
|
/* Mutexes
|
||||||
*/
|
*/
|
||||||
#define SCM_I_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
#define SCM_I_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
||||||
#define SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER \
|
|
||||||
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
|
|
||||||
#define scm_i_pthread_mutex_t pthread_mutex_t
|
#define scm_i_pthread_mutex_t pthread_mutex_t
|
||||||
#define scm_i_pthread_mutex_init pthread_mutex_init
|
#define scm_i_pthread_mutex_init pthread_mutex_init
|
||||||
#define scm_i_pthread_mutex_destroy pthread_mutex_destroy
|
#define scm_i_pthread_mutex_destroy pthread_mutex_destroy
|
||||||
#define scm_i_pthread_mutex_trylock pthread_mutex_trylock
|
#define scm_i_pthread_mutex_trylock pthread_mutex_trylock
|
||||||
#define scm_i_pthread_mutex_lock pthread_mutex_lock
|
#define scm_i_pthread_mutex_lock pthread_mutex_lock
|
||||||
#define scm_i_pthread_mutex_unlock pthread_mutex_unlock
|
#define scm_i_pthread_mutex_unlock pthread_mutex_unlock
|
||||||
|
extern pthread_mutexattr_t scm_i_pthread_mutexattr_recursive[1];
|
||||||
|
|
||||||
/* Condition variables
|
/* Condition variables
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1481,8 +1481,7 @@ scm_i_thread_sleep_for_gc ()
|
||||||
|
|
||||||
/* This mutex is used by SCM_CRITICAL_SECTION_START/END.
|
/* This mutex is used by SCM_CRITICAL_SECTION_START/END.
|
||||||
*/
|
*/
|
||||||
scm_i_pthread_mutex_t scm_i_critical_section_mutex =
|
scm_i_pthread_mutex_t scm_i_critical_section_mutex;
|
||||||
SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
|
|
||||||
int scm_i_critical_section_level = 0;
|
int scm_i_critical_section_level = 0;
|
||||||
|
|
||||||
static SCM framed_critical_section_mutex;
|
static SCM framed_critical_section_mutex;
|
||||||
|
@ -1501,9 +1500,21 @@ scm_frame_critical_section (SCM mutex)
|
||||||
scm_i_pthread_key_t scm_i_freelist, scm_i_freelist2;
|
scm_i_pthread_key_t scm_i_freelist, scm_i_freelist2;
|
||||||
scm_i_pthread_mutex_t scm_i_misc_mutex;
|
scm_i_pthread_mutex_t scm_i_misc_mutex;
|
||||||
|
|
||||||
|
#if SCM_USE_PTHREAD_THREADS
|
||||||
|
pthread_mutexattr_t scm_i_pthread_mutexattr_recursive[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_threads_prehistory (SCM_STACKITEM *base)
|
scm_threads_prehistory (SCM_STACKITEM *base)
|
||||||
{
|
{
|
||||||
|
#if SCM_USE_PTHREAD_THREADS
|
||||||
|
pthread_mutexattr_init (scm_i_pthread_mutexattr_recursive);
|
||||||
|
pthread_mutexattr_settype (scm_i_pthread_mutexattr_recursive,
|
||||||
|
PTHREAD_MUTEX_RECURSIVE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
scm_i_pthread_mutex_init (&scm_i_critical_section_mutex,
|
||||||
|
scm_i_pthread_mutexattr_recursive);
|
||||||
scm_i_pthread_mutex_init (&scm_i_misc_mutex, NULL);
|
scm_i_pthread_mutex_init (&scm_i_misc_mutex, NULL);
|
||||||
scm_i_pthread_cond_init (&wake_up_cond, NULL);
|
scm_i_pthread_cond_init (&wake_up_cond, NULL);
|
||||||
scm_i_pthread_key_create (&scm_i_freelist, NULL);
|
scm_i_pthread_key_create (&scm_i_freelist, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue