(Runloop data) Flesh out data thread callback

This commit is contained in:
twinaphex 2015-03-18 23:39:33 +01:00
parent e8bfadae1d
commit 14089975b4

View File

@ -751,10 +751,8 @@ static void rarch_main_data_overlay_iterate(void)
} }
#endif #endif
static void data_runloop_thread_deinit(void) static void data_runloop_thread_deinit(data_runloop_t *runloop)
{ {
data_runloop_t *runloop = &g_data_runloop;
if (!runloop->thread_inited) if (!runloop->thread_inited)
{ {
slock_lock(runloop->cond_lock); slock_lock(runloop->cond_lock);
@ -767,6 +765,8 @@ static void data_runloop_thread_deinit(void)
slock_free(runloop->cond_lock); slock_free(runloop->cond_lock);
scond_free(runloop->cond); scond_free(runloop->cond);
} }
runloop->thread_inited = false;
} }
static void rarch_main_data_deinit(void) static void rarch_main_data_deinit(void)
@ -778,9 +778,7 @@ static void rarch_main_data_deinit(void)
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
if (runloop->thread_inited) if (runloop->thread_inited)
data_runloop_thread_deinit(); data_runloop_thread_deinit(runloop);
runloop->thread_inited = false;
#endif #endif
runloop->inited = false; runloop->inited = false;
@ -803,12 +801,23 @@ static void data_thread_loop(void *data)
{ {
data_runloop_t *runloop = (data_runloop_t*)data; data_runloop_t *runloop = (data_runloop_t*)data;
RARCH_LOG("[Data Thread]: Initializing data thread.\n");
slock_lock(runloop->lock);
while (!runloop->thread_inited)
scond_wait(runloop->cond, runloop->lock);
slock_unlock(runloop->lock);
RARCH_LOG("[Data Thread]: Starting data thread.\n");
while (!runloop->thread_quit) while (!runloop->thread_quit)
{ {
slock_lock(runloop->lock); slock_lock(runloop->lock);
data_runloop_iterate(runloop); data_runloop_iterate(runloop);
slock_unlock(runloop->lock); slock_unlock(runloop->lock);
} }
data_runloop_thread_deinit(runloop);
} }
#endif #endif
@ -836,7 +845,7 @@ void rarch_main_data_iterate(void)
return; return;
if (g_data_runloop.thread_inited) if (g_data_runloop.thread_inited)
data_runloop_thread_deinit(); data_runloop_thread_deinit(&g_data_runloop);
else else
rarch_main_data_thread_init(); rarch_main_data_thread_init();
} }