40 lines
805 B
C
40 lines
805 B
C
#include <fx/global.h>
|
|
#include <fx/thread.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
static fx_queue globals = FX_QUEUE_INIT;
|
|
static fx_mutex globals_lock = FX_MUTEX_INIT;
|
|
|
|
struct global {
|
|
fx_object *g_object;
|
|
fx_queue_entry g_entry;
|
|
};
|
|
|
|
void fx_cleanup_global(void)
|
|
{
|
|
fx_queue_entry *cur = fx_queue_first(&globals);
|
|
while (cur) {
|
|
struct global *global = fx_unbox(struct global, cur, g_entry);
|
|
cur = fx_queue_next(cur);
|
|
|
|
fx_object_unref(global->g_object);
|
|
free(global);
|
|
}
|
|
}
|
|
|
|
void fx_register_global(fx_object *obj)
|
|
{
|
|
struct global *global = malloc(sizeof *global);
|
|
if (!global) {
|
|
return;
|
|
}
|
|
|
|
memset(global, 0x0, sizeof *global);
|
|
|
|
global->g_object = fx_object_ref(obj);
|
|
fx_mutex_lock(&globals_lock);
|
|
fx_queue_push_back(&globals, &global->g_entry);
|
|
fx_mutex_unlock(&globals_lock);
|
|
}
|