#include "condvar.h"
#include <stdlib.h>
UiCondVar* ui_condvar_create(
void) {
UiPosixCondVar *var = malloc(
sizeof(UiPosixCondVar));
var->var.data =
NULL;
var->var.intdata =
0;
var->set =
0;
pthread_mutex_init(&var->lock,
NULL);
pthread_cond_init(&var->cond,
NULL);
return (UiCondVar*)var;
}
void ui_condvar_wait(UiCondVar *var) {
UiPosixCondVar *p = (UiPosixCondVar*)var;
pthread_mutex_lock(&p->lock);
if(!p->set) {
pthread_cond_wait(&p->cond, &p->lock);
}
p->set =
0;
pthread_mutex_unlock(&p->lock);
}
void ui_condvar_signal(UiCondVar *var,
void *data,
int intdata) {
UiPosixCondVar *p = (UiPosixCondVar*)var;
pthread_mutex_lock(&p->lock);
p->var.data = data;
p->var.intdata = intdata;
p->set =
1;
pthread_cond_signal(&p->cond);
pthread_mutex_unlock(&p->lock);
}
void ui_condvar_destroy(UiCondVar *var) {
UiPosixCondVar *p = (UiPosixCondVar*)var;
pthread_mutex_destroy(&p->lock);
pthread_cond_destroy(&p->cond);
free(p);
}