Marcel Plch
c2b9dfdd29
There are no memory leaks, yet, I discover, with my steady course, thru my small valgrind peeks, that nvidia are a bunch of stupid a-holes.
64 lines
1.2 KiB
C
64 lines
1.2 KiB
C
#include <cx.h>
|
|
|
|
CX_Thread *
|
|
cx_thread_new(void *(*target)(void *),
|
|
void *ctx) {
|
|
CX_Thread *self;
|
|
int err;
|
|
|
|
self = malloc(sizeof(CX_Thread));
|
|
if (!self) {
|
|
goto err;
|
|
}
|
|
self->ctx = ctx;
|
|
err = pthread_create(&self->thread, NULL, target, self);
|
|
if (err) {
|
|
goto err;
|
|
}
|
|
|
|
return self;
|
|
|
|
err:
|
|
free(self);
|
|
return NULL;
|
|
}
|
|
|
|
void
|
|
cx_thread_free(CX_Thread *self) {
|
|
if (self) {
|
|
/* TODO */
|
|
/* This is naive in its current form and will shatter
|
|
* sooner or later.
|
|
* Fix the context structures so that this call
|
|
* is guaranteed not to touch invalid memory.
|
|
*/
|
|
((CX_GL_CTX *)self->ctx)->free(self->ctx);
|
|
}
|
|
free(self);
|
|
}
|
|
|
|
CX_ThreadGroup *
|
|
cx_threadGroup_new(void *(*target)(void *),
|
|
void *ctx) {
|
|
CX_ThreadGroup *self;
|
|
|
|
self = malloc(sizeof(CX_ThreadGroup));
|
|
|
|
self->workers = malloc(8 * sizeof(CX_Thread *));
|
|
self->worker_count = 0;
|
|
self->worker_size = 8;
|
|
|
|
self->group_manager = cx_thread_new(target, ctx);
|
|
|
|
return self;
|
|
}
|
|
|
|
void
|
|
cx_threadGroup_free(CX_ThreadGroup *self) {
|
|
if (self) {
|
|
cx_thread_free(self->group_manager);
|
|
free(self->workers);
|
|
}
|
|
free(self);
|
|
}
|
|
|