void __lwp_sema_initialize(lwp_sema *sema,lwp_semattr *attrs,u32 init_count) { sema->attrs = *attrs; sema->count = init_count; __lwp_threadqueue_init(&sema->wait_queue,__lwp_sema_ispriority(attrs)?LWP_THREADQ_MODEPRIORITY:LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_SEMAPHORE,LWP_SEMA_TIMEOUT); }
s32 LWP_InitQueue(lwpq_t *thequeue) { tqueue_st *tq; if(!thequeue) return -1; tq = __lwp_tqueue_allocate(); if(!tq) return -1; __lwp_threadqueue_init(&tq->tqueue,LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_ON_THREADQ,0); *thequeue = (lwpq_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_TQUEUE)|LWP_OBJMASKID(tq->object.id)); __lwp_thread_dispatchenable(); return 0; }
s32 LWP_CondInit(cond_t *cond) { cond_st *ret; if(!cond) return -1; ret = __lwp_cond_allocate(); if(!ret) return ENOMEM; ret->lock = LWP_MUTEX_NULL; __lwp_threadqueue_init(&ret->wait_queue,LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_CONDVAR,ETIMEDOUT); *cond = (cond_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_COND)|LWP_OBJMASKID(ret->object.id)); __lwp_thread_dispatchenable(); return 0; }