lwp_alloc_process(char *name, pthread_startroutine_t ep, pthread_addr_t arg)
{
PROCESS lp;
- assert(lp = (PROCESS) malloc(sizeof(*lp)));
+ lp = (PROCESS) malloc(sizeof(*lp));
+ assert(lp);
memset(lp, 0, sizeof(*lp));
if (!name) {
char temp[100];
static procnum;
sprintf(temp, "unnamed_process_%04d", ++procnum);
- assert(name = (char *)malloc(strlen(temp) + 1));
+ name = (char *)malloc(strlen(temp) + 1);
+ assert(name);
strcpy(name, temp);
}
lp->name = name;
{
lp->next = lwp_process_list;
lwp_process_list = lp;
- assert(!pthread_setspecific(lwp_process_key, (pthread_addr_t) lp));
+ if (pthread_setspecific(lwp_process_key, (pthread_addr_t) lp) != 0)
+ assert(0);
}
/* The top-level routine used as entry point to explicitly created LWP
{
PROCESS lp = (PROCESS) argp;
- assert(!pthread_mutex_lock(&lwp_mutex));
+ MUTEX_ENTER(&lwp_mutex);
lwp_thread_process(lp);
(lp->ep) (lp->arg);
- assert(!pthread_mutex_unlock(&lwp_mutex));
+ MUTEX_EXIT(&lwp_mutex);
/* Should cleanup state */
}
if (!cmalwp_pri_inrange(priority))
return LWP_EBADPRI;
#endif
- assert(!pthread_attr_create(&attr));
- assert(!pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED));
+ if (pthread_attr_create(&attr))
+ assert(0);
+ if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
+ assert(0);
if (stacksize)
- assert(!pthread_attr_setstacksize(&attr, stacksize));
+ if (pthread_attr_setstacksize(&attr, stacksize))
+ assert(0);
#ifndef BDE_THREADS
(void)pthread_attr_setinheritsched(&attr, PTHREAD_DEFAULT_SCHED);
(void)pthread_attr_setsched(&attr, SCHED_FIFO);
(pthread_addr_t) parm);
/* allow new thread to run if higher priority */
- assert(!pthread_mutex_unlock(&lwp_mutex));
+ MUTEX_EXIT(&lwp_mutex);
/* process is only added to active list after first time it runs (it adds itself) */
status =
pthread_create(&lp->handle, attr,
(pthread_startroutine_t) lwp_top_level,
(pthread_addr_t) lp);
- assert(!pthread_attr_delete(&attr));
- assert(!pthread_mutex_lock(&lwp_mutex));
+ if (pthread_attr_delete(&attr))
+ assert(0);
+ if (pthread_mutex_lock(&lwp_mutex))
+ assert(0);
if (status != 0) {
free(lp);
return LWP_ENOMEM;
LWP_ActiveProcess(void)
{ /* returns pid of current process */
PROCESS pid;
- assert(!pthread_getspecific(lwp_process_key, (pthread_addr_t *) & pid));
+ if (pthread_getspecific(lwp_process_key, (pthread_addr_t *) & pid))
+ assert(0);
return pid;
}
int
LWP_CurrentProcess(PROCESS * pid)
{ /* get pid of current process */
- assert(!pthread_getspecific(lwp_process_key, (pthread_addr_t *) pid));
+ if (pthread_getspecific(lwp_process_key, (pthread_addr_t *) pid))
+ assert(0);
return LWP_SUCCESS;
}
int
LWP_DispatchProcess(void)
{ /* explicit voluntary preemption */
- assert(!pthread_mutex_unlock(&lwp_mutex));
+ MUTEX_EXIT(&lwp_mutex);
pthread_yield();
- assert(!pthread_mutex_lock(&lwp_mutex));
+ MUTEX_ENTER(&lwp_mutex);
return LWP_SUCCESS;
}
/* Create pthread key to associate LWP process descriptor with each
* LWP-created thread */
- assert(!pthread_keycreate(&lwp_process_key, (pthread_destructor_t)
- lwp_process_key_destructor));
+ if (pthread_keycreate(&lwp_process_key, (pthread_destructor_t)
+ lwp_process_key_destructor))
+ assert(0);
lp = lwp_alloc_process("main process", main, 0);
lp->handle = pthread_self();
cmalwp_lwppri_to_cmapri(priority));
#endif
- assert(pthread_mutex_init(&lwp_mutex, MUTEX_FAST_NP) == 0);
- assert(pthread_mutex_lock(&lwp_mutex) == 0);
+ MUTEX_INIT(&lwp_mutex, "lwp", MUTEX_DEFAULT, 0);
+ MUTEX_ENTER(&lwp_mutex);
initialized = 1;
*pid = lp;
return LWP_SUCCESS;
assert(newp);
newp->next = hashtable[hashcode];
hashtable[hashcode] = newp;
- assert(!pthread_cond_init(&newp->cond, ((pthread_condattr_t) 0)));
+ if (pthread_cond_init(&newp->cond, ((pthread_condattr_t) 0)))
+ assert(0);
newp->seq = 0;
}
newp->event = event;
ev = getevent(event);
seq = ev->seq;
while (seq == ev->seq) {
- assert(pthread_cond_wait(&ev->cond, &lwp_mutex) == 0);
+ if (pthread_cond_wait(&ev->cond, &lwp_mutex))
+ assert(0);
}
debugf(("%s: Woken up (%x)\n", lwp_process_string(), event));
relevent(ev);
ev = getevent(event);
if (ev->refcount > 1) {
ev->seq++;
- assert(pthread_cond_broadcast(&ev->cond) == 0);
+ if (pthread_cond_broadcast(&ev->cond))
+ assert(0);
}
relevent(ev);
return LWP_SUCCESS;
ev = getevent(event);
if (ev->refcount > 1) {
ev->seq++;
- assert(!pthread_mutex_unlock(&lwp_mutex));
- assert(!pthread_cond_broadcast(&ev->cond));
+ MUTEX_EXIT(&lwp_mutex);
+ CV_BROADCAST(&ev->cond);
pthread_yield();
- assert(!pthread_mutex_lock(&lwp_mutex));
+ MUTEX_ENTER(&lwp_mutex);
}
relevent(ev);
return LWP_SUCCESS;