fifo fifo_new(size_t size) { fifo p; assert(size > 0); if ((p = malloc(sizeof *p)) == NULL) return NULL; if ((p->lock = wlock_new()) == NULL) { free(p); return NULL; } if ((p->pelem = calloc(size, sizeof *p->pelem)) == NULL) { wlock_free(p->lock); free(p); return NULL; } p->size = size; p->nelem = 0; p->iwrite = p->iread = 0; return p; }
int main(void) { wlock w = wlock_new(); pthread_t wid, sid; pthread_create(&wid, NULL, waiter, w); sleep(1); /* Give the thread some time to call wlock_wait() before we signal */ pthread_create(&sid, NULL, signaler, w); pthread_join(wid, NULL); pthread_join(sid, NULL); wlock_free(w); return 0; }
/* wvctl_free_mouse_cbl_lock Internal helper function to free mouse callback list lock. */ wstatus wvctl_free_mouse_cbl_lock(void) { dbgprint(MOD_WVIEWCTL,__func__,"called"); dbgprint(MOD_WVIEWCTL,__func__,"freeing mouse callback list lock"); if( wlock_free(&mouse_cbl_lock) != WSTATUS_SUCCESS ) { /* something went wrong with the free, program should abort ASAP.. */ dbgprint(MOD_WVIEWCTL,__func__,"unable to free mouse callback list lock"); DBGRET_FAILURE(MOD_WVIEWCTL); } DBGRET_SUCCESS(MOD_WVIEWCTL); }
/* wvctl_free_keyboard_cbl_lock Internal helper function to free keyboard callback list lock. */ wstatus wvctl_free_keyboard_cbl_lock(void) { dbgprint(MOD_WVIEWCTL,__func__,"called"); dbgprint(MOD_WVIEWCTL,__func__,"freeing keyboard callback list lock"); if( wlock_free(&keyboard_cbl_lock) != WSTATUS_SUCCESS ) { /* something went wrong with the free, program should abort ASAP.. */ dbgprint(MOD_WVIEWCTL,__func__,"unable to free keyboard callback list lock"); DBGRET_FAILURE(MOD_WVIEWCTL); } dbgprint(MOD_WVIEWCTL,__func__,"keyboard callback list lock was freed successfully"); DBGRET_SUCCESS(MOD_WVIEWCTL); }
void fifo_free(fifo p, dtor dtor_fn) { if (p == NULL) return; if (dtor_fn != NULL) { size_t i; for (i = 0; i < p->size; i++) { if (p->pelem[i] != NULL) dtor_fn(p->pelem[i]); } } wlock_free(p->lock); free(p->pelem); free(p); }