summaryrefslogtreecommitdiff
path: root/libguile/coop.c
diff options
context:
space:
mode:
authorMikael Djurfeldt <djurfeldt@nada.kth.se>1998-01-26 01:43:16 +0000
committerMikael Djurfeldt <djurfeldt@nada.kth.se>1998-01-26 01:43:16 +0000
commitc8bf4ecd10fa243f653a8b0a4e6b72c5c2ac5f3b (patch)
tree4853ca27b0e2ac0db9793d1b80e84934e8b2e0ae /libguile/coop.c
parent3237b129f7387f821966583c5b51b810f70bc882 (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.c76
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;
}