diff options
Diffstat (limited to 'Python/thread_lwp.h')
| -rw-r--r-- | Python/thread_lwp.h | 113 | 
1 files changed, 0 insertions, 113 deletions
| diff --git a/Python/thread_lwp.h b/Python/thread_lwp.h deleted file mode 100644 index ba7b37a..0000000 --- a/Python/thread_lwp.h +++ /dev/null @@ -1,113 +0,0 @@ - -#include <stdlib.h> -#include <lwp/lwp.h> -#include <lwp/stackdep.h> - -#define STACKSIZE       1000    /* stacksize for a thread */ -#define NSTACKS         2       /* # stacks to be put in cache initially */ - -struct lock { -    int lock_locked; -    cv_t lock_condvar; -    mon_t lock_monitor; -}; - - -/* - * Initialization. - */ -static void PyThread__init_thread(void) -{ -    lwp_setstkcache(STACKSIZE, NSTACKS); -} - -/* - * Thread support. - */ - - -long PyThread_start_new_thread(void (*func)(void *), void *arg) -{ -    thread_t tid; -    int success; -    dprintf(("PyThread_start_new_thread called\n")); -    if (!initialized) -        PyThread_init_thread(); -    success = lwp_create(&tid, func, MINPRIO, 0, lwp_newstk(), 1, arg); -    return success < 0 ? -1 : 0; -} - -long PyThread_get_thread_ident(void) -{ -    thread_t tid; -    if (!initialized) -        PyThread_init_thread(); -    if (lwp_self(&tid) < 0) -        return -1; -    return tid.thread_id; -} - -void PyThread_exit_thread(void) -{ -    dprintf(("PyThread_exit_thread called\n")); -    if (!initialized) -        exit(0); -    lwp_destroy(SELF); -} - -/* - * Lock support. - */ -PyThread_type_lock PyThread_allocate_lock(void) -{ -    struct lock *lock; -    extern char *malloc(size_t); - -    dprintf(("PyThread_allocate_lock called\n")); -    if (!initialized) -        PyThread_init_thread(); - -    lock = (struct lock *) malloc(sizeof(struct lock)); -    lock->lock_locked = 0; -    (void) mon_create(&lock->lock_monitor); -    (void) cv_create(&lock->lock_condvar, lock->lock_monitor); -    dprintf(("PyThread_allocate_lock() -> %p\n", lock)); -    return (PyThread_type_lock) lock; -} - -void PyThread_free_lock(PyThread_type_lock lock) -{ -    dprintf(("PyThread_free_lock(%p) called\n", lock)); -    mon_destroy(((struct lock *) lock)->lock_monitor); -    free((char *) lock); -} - -int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) -{ -    int success; - -    dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); -    success = 0; - -    (void) mon_enter(((struct lock *) lock)->lock_monitor); -    if (waitflag) -        while (((struct lock *) lock)->lock_locked) -            cv_wait(((struct lock *) lock)->lock_condvar); -    if (!((struct lock *) lock)->lock_locked) { -        success = 1; -        ((struct lock *) lock)->lock_locked = 1; -    } -    cv_broadcast(((struct lock *) lock)->lock_condvar); -    mon_exit(((struct lock *) lock)->lock_monitor); -    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)); -    (void) mon_enter(((struct lock *) lock)->lock_monitor); -    ((struct lock *) lock)->lock_locked = 0; -    cv_broadcast(((struct lock *) lock)->lock_condvar); -    mon_exit(((struct lock *) lock)->lock_monitor); -} | 
