From 458120dd40db6b4df55a4e96b650e16798ef06a0 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 3 May 2011 11:25:13 +0000 Subject: add hg and python --- sys/src/cmd/python/Python/thread_plan9.h | 135 +++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 sys/src/cmd/python/Python/thread_plan9.h (limited to 'sys/src/cmd/python/Python/thread_plan9.h') 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 +#include +#include + +/* + * 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); +} + -- cgit v1.2.3