(runloop_data.c) refactor

This commit is contained in:
twinaphex 2015-08-06 02:52:37 +02:00
parent 98f46f9e17
commit 3a25e60140

View File

@ -57,48 +57,38 @@ static char data_runloop_msg[PATH_MAX_LENGTH];
static data_runloop_t g_data_runloop; static data_runloop_t g_data_runloop;
static data_runloop_t *rarch_main_data_get_ptr(void)
{
return &g_data_runloop;
}
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
static void data_runloop_thread_deinit(data_runloop_t *runloop) static void data_runloop_thread_deinit(void)
{ {
if (!runloop->thread_inited) if (!g_data_runloop.thread_inited)
{ {
slock_lock(runloop->cond_lock); slock_lock(g_data_runloop.cond_lock);
runloop->alive = false; g_data_runloop.alive = false;
scond_signal(runloop->cond); scond_signal(g_data_runloop.cond);
slock_unlock(runloop->cond_lock); slock_unlock(g_data_runloop.cond_lock);
sthread_join(runloop->thread); sthread_join(g_data_runloop.thread);
slock_free(runloop->lock); slock_free(g_data_runloop.lock);
slock_free(runloop->cond_lock); slock_free(g_data_runloop.cond_lock);
rarch_main_data_overlay_thread_uninit(); rarch_main_data_overlay_thread_uninit();
scond_free(runloop->cond); scond_free(g_data_runloop.cond);
} }
} }
#endif #endif
void rarch_main_data_deinit(void) void rarch_main_data_deinit(void)
{ {
data_runloop_t *runloop = rarch_main_data_get_ptr();
if (!runloop)
return;
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
if (runloop->thread_inited) if (g_data_runloop.thread_inited)
{ {
data_runloop_thread_deinit(runloop); data_runloop_thread_deinit();
runloop->thread_inited = false; g_data_runloop.thread_inited = false;
runloop->thread_code = THREAD_CODE_DEINIT; g_data_runloop.thread_code = THREAD_CODE_DEINIT;
} }
#endif #endif
runloop->inited = false; g_data_runloop.inited = false;
} }
void rarch_main_data_free(void) void rarch_main_data_free(void)
@ -191,47 +181,41 @@ static void data_thread_loop(void *data)
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
static void rarch_main_data_thread_init(void) static void rarch_main_data_thread_init(void)
{ {
data_runloop_t *runloop = rarch_main_data_get_ptr(); g_data_runloop.lock = slock_new();
g_data_runloop.cond_lock = slock_new();
if (!runloop) g_data_runloop.cond = scond_new();
return;
runloop->lock = slock_new();
runloop->cond_lock = slock_new();
runloop->cond = scond_new();
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
rarch_main_data_overlay_thread_init(); rarch_main_data_overlay_thread_init();
#endif #endif
runloop->thread = sthread_create(data_thread_loop, runloop); g_data_runloop.thread = sthread_create(data_thread_loop, &g_data_runloop);
if (!runloop->thread) if (!g_data_runloop.thread)
goto error; goto error;
slock_lock(runloop->lock); slock_lock(g_data_runloop.lock);
runloop->thread_inited = true; g_data_runloop.thread_inited = true;
runloop->alive = true; g_data_runloop.alive = true;
runloop->thread_code = THREAD_CODE_ALIVE; g_data_runloop.thread_code = THREAD_CODE_ALIVE;
slock_unlock(runloop->lock); slock_unlock(g_data_runloop.lock);
return; return;
error: error:
data_runloop_thread_deinit(runloop); data_runloop_thread_deinit();
} }
#endif #endif
void rarch_main_data_iterate(void) void rarch_main_data_iterate(void)
{ {
data_runloop_t *runloop = rarch_main_data_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
(void)settings; (void)settings;
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
if (settings->menu.threaded_data_runloop_enable) if (settings->menu.threaded_data_runloop_enable)
{ {
switch (runloop->thread_code) switch (g_data_runloop.thread_code)
{ {
case THREAD_CODE_INIT: case THREAD_CODE_INIT:
rarch_main_data_thread_init(); rarch_main_data_thread_init();
@ -271,7 +255,7 @@ void rarch_main_data_iterate(void)
#endif #endif
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
if (settings->menu.threaded_data_runloop_enable && runloop->alive) if (settings->menu.threaded_data_runloop_enable && g_data_runloop.alive)
return; return;
#endif #endif