Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
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);
}
Esempio n. 4
0
/*
   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);
}
Esempio n. 5
0
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);
}