diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Python/thread_plan9.h | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Python/thread_plan9.h')
-rw-r--r-- | sys/src/cmd/python/Python/thread_plan9.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Python/thread_plan9.h b/sys/src/cmd/python/Python/thread_plan9.h new file mode 100644 index 000000000..d0504806e --- /dev/null +++ b/sys/src/cmd/python/Python/thread_plan9.h @@ -0,0 +1,135 @@ +#define _PLAN9_SOURCE +#include <u.h> +#include <lib9.h> +#include <qlock.h> + +/* + * Initialization. + */ +static void +PyThread__init_thread(void) +{ +} + +/* + * Thread support. + */ +long +PyThread_start_new_thread(void (*func)(void *), void *arg) +{ + dprintf(("PyThread_start_new_thread called\n")); + if (!initialized) + PyThread_init_thread(); + switch(rfork(RFPROC|RFMEM)){ + case -1: + printf("rfork: %r\n"); + return -1; + case 0: + _threadarg->fn = func; + _threadarg->arg = arg; + longjmp(_threadarg->jb, 1); + default: + return 0; + } +} + +long +PyThread_get_thread_ident(void) +{ + if (!initialized) + PyThread_init_thread(); + return getpid(); +} + +void +PyThread_exit_thread(void) +{ + if(initialized) + _exit(0); + exit(0); +} + +void +PyThread__exit_thread(void) +{ + _exit(0); +} + +#ifndef NO_EXIT_PROG +static +void do_PyThread_exit_prog(int status, int no_cleanup) +{ + /* + * BUG BUG BUG + */ + + dprintf(("PyThread_exit_prog(%d) called\n", status)); + if (!initialized) + if (no_cleanup) + _exit(status); + else + exit(status); +} + +void +PyThread_exit_prog(int status) +{ + do_PyThread_exit_prog(status, 0); +} + +void +PyThread__exit_prog(int status) +{ + do_PyThread_exit_prog(status, 1); +} +#endif /* NO_EXIT_PROG */ + +/* + * Lock support. + */ +PyThread_type_lock +PyThread_allocate_lock(void) +{ + QLock *lk; + + dprintf(("PyThread_allocate_lock called\n")); + if (!initialized) + PyThread_init_thread(); + + lk = malloc(sizeof(*lk)); + memset(lk, 0, sizeof(*lk)); + dprintf(("PyThread_allocate_lock() -> %p\n", lk)); + return lk; +} + +void +PyThread_free_lock(PyThread_type_lock lock) +{ + dprintf(("PyThread_free_lock(%p) called\n", lock)); + free(lock); +} + +int +PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) +{ + int success; + + dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); + if(lock == nil) + success = 0; + else if(waitflag){ + qlock(lock); + success = 1; + }else + success = canqlock(lock); + dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success)); + return success; +} + +void +PyThread_release_lock(PyThread_type_lock lock) +{ + dprintf(("PyThread_release_lock(%p) called\n", lock)); + qunlock(lock); +} + |