diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1998-01-26 01:43:16 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1998-01-26 01:43:16 +0000 |
commit | c8bf4ecd10fa243f653a8b0a4e6b72c5c2ac5f3b (patch) | |
tree | 4853ca27b0e2ac0db9793d1b80e84934e8b2e0ae /libguile/coop.c | |
parent | 3237b129f7387f821966583c5b51b810f70bc882 (diff) |
* coop.c (coop_mutex_init, coop_mutex_lock, coop_mutex_unlock,
coop_condition_variable_init, coop_condition_variable_wait,
coop_condition_variable_signal): Changed return type from `void'
to `int'. This is to adhere closer to the pthreads interface.
This, in turn, is part of an attempt to provide C versions of the
mutex and condition variable primitives which can be part of a
frontend to COOP or pthreads.
* coop.c (coop_mutex_destroy, coop_condition_variable_wait_mutex,
coop_condition_variable_destroy): New functions.
* coop-threads.c (scm_wait_condition_variable): Use
coop_condition_variable_wait_mutex.
* coop-threads.h, coop-defs.h (coop_q_t, coop_m, coop_c):
Definitions moved to coop-defs.h.
* coop-defs.h (scm_mutex_init, scm_mutex_lock, scm_mutex_unlock,
scm_mutex_destroy, scm_cond_init, scm_cond_wait, scm_cond_signal,
scm_cond_destroy): New C interface to mutecis and cond vars.
Diffstat (limited to 'libguile/coop.c')
-rw-r--r-- | libguile/coop.c | 76 |
1 files changed, 63 insertions, 13 deletions
diff --git a/libguile/coop.c b/libguile/coop.c index 81f0e3d76..a2c7cd5ff 100644 --- a/libguile/coop.c +++ b/libguile/coop.c @@ -40,7 +40,7 @@ * If you do not wish that, delete this exception notice. */ -/* $Id: coop.c,v 1.3 1997-11-27 18:04:53 mdj Exp $ */ +/* $Id: coop.c,v 1.4 1998-01-26 01:43:16 mdj Exp $ */ /* Cooperative thread library, based on QuickThreads */ @@ -262,23 +262,24 @@ coop_starthelp (old, ignore0, ignore1) } #ifdef __STDC__ -void +int coop_mutex_init (coop_m *m) #else -void +int coop_mutex_init (m) coop_m *m; #endif { m->owner = NULL; coop_qinit(&(m->waiting)); + return 0; } #ifdef __STDC__ -void +int coop_mutex_lock (coop_m *m) #else -void +int coop_mutex_lock () coop_m *m; #endif @@ -303,14 +304,15 @@ coop_mutex_lock () coop_global_curr = newthread; QT_BLOCK (coop_yieldhelp, old, &(m->waiting), newthread->sp); } + return 0; } #ifdef __STDC__ -void +int coop_mutex_unlock (coop_m *m) #else -void +int coop_mutex_unlock (m) coop_m *m; #endif @@ -332,26 +334,41 @@ coop_mutex_unlock (m) { m->owner = NULL; } + return 0; } #ifdef __STDC__ -void +int +coop_mutex_destroy (coop_m *m) +#else +int +coop_mutex_destroy (m) + coop_m *m; +#endif +{ + return 0; +} + + +#ifdef __STDC__ +int coop_condition_variable_init (coop_c *c) #else -void +int coop_condition_variable_init (c) coop_c *c; #endif { coop_qinit(&(c->waiting)); + return 0; } #ifdef __STDC__ -void +int coop_condition_variable_wait (coop_c *c) #else -void +int coop_condition_variable_wait (c) coop_c *c; #endif @@ -366,13 +383,32 @@ coop_condition_variable_wait (c) old = coop_global_curr; coop_global_curr = newthread; QT_BLOCK (coop_yieldhelp, old, &(c->waiting), newthread->sp); + return 0; +} + + +#ifdef __STDC__ +int +coop_condition_variable_wait_mutex (coop_c *c, coop_m *m) +#else +int +coop_condition_variable_wait_mutex (c, m) + coop_c *c; + coop_m *m; +#endif +{ + coop_mutex_unlock (m); + coop_condition_variable_wait (c); + coop_mutex_lock (m); + return 0; } + #ifdef __STDC__ -void +int coop_condition_variable_signal (coop_c *c) #else -void +int coop_condition_variable_signal (c) coop_c *c; #endif @@ -383,6 +419,20 @@ coop_condition_variable_signal (c) { coop_qput (&coop_global_runq, newthread); } + return 0; +} + + +#ifdef __STDC__ +int +coop_condition_variable_destroy (coop_c *c) +#else +int +coop_condition_variable_destroy (c) + coop_c *c; +#endif +{ + return 0; } |