inline int xp_wait_until_condition(struct xp_queue *queue, int (*cfunction)(void *), void *cparam, int allow_interrupt) { /* wait until cfunction(cparam) != 0 (condition is true) */ if (allow_interrupt) { return wait_event_interruptible(queue->queue, cfunction(cparam) != 0); } else { wait_event(queue->queue, cfunction(cparam) != 0); } return 0; }
int xp_wait_until_condition(struct xp_queue *queue, int (*cfunction)(void *), void *cparam, int allow_interrupt) { pthread_mutex_lock(&(queue->mutex)); while (1) { if (cfunction(cparam)) break; pthread_cond_wait(&(queue->condition), &(queue->mutex)); } pthread_mutex_unlock(&(queue->mutex)); return 0; }
static void cfunction_generic(asIScriptGeneric *) { cfunction(); }