summaryrefslogtreecommitdiff
path: root/coro.h
diff options
context:
space:
mode:
authorroot <root>2008-04-04 20:07:35 +0000
committerroot <root>2008-04-04 20:07:35 +0000
commite8a65d610b04d7edd7299dd578111231efbd095d (patch)
tree5169843c2e5055ed042e15470e2de939cc696643 /coro.h
parente66e1f7c70a5ec4f6ff0aa04fb066c460b66be5a (diff)
*** empty log message ***rel-4_49
Diffstat (limited to 'coro.h')
-rw-r--r--coro.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/coro.h b/coro.h
index 27d562e..e9dd3e6 100644
--- a/coro.h
+++ b/coro.h
@@ -53,6 +53,7 @@
* on SIGUSR2 and sigaltstack in Crossfire).
* 2008-01-21 Disable CFI usage on anything but GNU/Linux.
* 2008-03-02 Switched to 2-clause BSD license with GPL exception.
+ * 2008-04-04 New (but highly unrecommended) pthreads backend.
*/
#ifndef CORO_H
@@ -106,6 +107,10 @@
* Handcoded assembly, known to work only on a few architectures/ABI:
* ELF Linux x86 && amd64 when gcc is used and optimisation is turned on.
*
+ * -DCORO_PTHREAD
+ *
+ * Use the pthread API. You have to provide <pthread.h> and -lpthread.
+ *
* If you define neither of these symbols, coro.h will try to autodetect
* the model. This currently works for CORO_LOSER only. For the other
* alternatives you should check (e.g. using autoconf) and define the
@@ -153,7 +158,8 @@ void coro_transfer(coro_context *prev, coro_context *next);
#if !defined(CORO_LOSER) && !defined(CORO_UCONTEXT) \
&& !defined(CORO_SJLJ) && !defined(CORO_LINUX) \
- && !defined(CORO_IRIX) && !defined(CORO_ASM)
+ && !defined(CORO_IRIX) && !defined(CORO_ASM) \
+ && !defined(CORO_PTHREAD)
# if defined(WINDOWS)
# define CORO_LOSER 1 /* you don't win with windoze */
# elif defined(__linux) && (defined(__x86) || defined (__amd64))
@@ -204,7 +210,19 @@ struct coro_context {
};
void __attribute__ ((__noinline__, __fastcall__))
- coro_transfer(coro_context *prev, coro_context *next);
+ coro_transfer (coro_context *prev, coro_context *next);
+
+#elif CORO_PTHREAD
+
+#include <pthread.h>
+
+extern pthread_mutex_t coro_mutex;
+
+struct coro_context {
+ pthread_cond_t c;
+};
+
+void coro_transfer (coro_context *prev, coro_context *next);
#endif