diff --git a/runloop_data.c b/runloop_data.c index ae2bda4f1d..bf9293da6a 100644 --- a/runloop_data.c +++ b/runloop_data.c @@ -61,7 +61,7 @@ static void data_runloop_thread_deinit(data_runloop_t *runloop) slock_free(runloop->lock); slock_free(runloop->cond_lock); - slock_free(runloop->overlay_lock); + rarch_main_data_overlay_thread_uninit(); scond_free(runloop->cond); } } @@ -195,9 +195,12 @@ static void rarch_main_data_thread_init(void) runloop->lock = slock_new(); runloop->cond_lock = slock_new(); - runloop->overlay_lock = slock_new(); runloop->cond = scond_new(); +#ifdef HAVE_OVERLAY + rarch_main_data_overlay_thread_init(); +#endif + runloop->thread = sthread_create(data_thread_loop, runloop); if (!runloop->thread) @@ -212,10 +215,7 @@ static void rarch_main_data_thread_init(void) return; error: - slock_free(runloop->lock); - slock_free(runloop->cond_lock); - slock_free(runloop->overlay_lock); - scond_free(runloop->cond); + data_runloop_thread_deinit(runloop); } #endif diff --git a/runloop_data.h b/runloop_data.h index c2363b1e3d..0c3b4aa7be 100644 --- a/runloop_data.h +++ b/runloop_data.h @@ -48,7 +48,6 @@ typedef struct data_runloop slock_t *lock; slock_t *cond_lock; - slock_t *overlay_lock; scond_t *cond; sthread_t *thread; #endif diff --git a/tasks/task_overlay.c b/tasks/task_overlay.c index a6da009c8d..dbd49e1cc8 100644 --- a/tasks/task_overlay.c +++ b/tasks/task_overlay.c @@ -14,25 +14,30 @@ */ #include +#ifdef HAVE_THREADS +#include +#endif #include "../driver.h" #include "../runloop.h" -#include "../runloop_data.h" #include "tasks.h" +#ifdef HAVE_THREADS +static slock_t *overlay_lock; +#endif + void rarch_main_data_overlay_image_upload_iterate(bool is_thread, void *data) { - data_runloop_t *runloop = (data_runloop_t*)data; driver_t *driver = driver_get_ptr(); if (rarch_main_is_idle()) return; - if (!driver->overlay || !runloop) + if (!driver->overlay) return; #ifdef HAVE_THREADS if (is_thread) - slock_lock(runloop->overlay_lock); + slock_lock(overlay_lock); #endif switch (driver->overlay->state) @@ -46,13 +51,12 @@ void rarch_main_data_overlay_image_upload_iterate(bool is_thread, void *data) #ifdef HAVE_THREADS if (is_thread) - slock_unlock(runloop->overlay_lock); + slock_unlock(overlay_lock); #endif } void rarch_main_data_overlay_iterate(bool is_thread, void *data) { - data_runloop_t *runloop = (data_runloop_t*)data; driver_t *driver = NULL; if (rarch_main_is_idle()) @@ -60,7 +64,7 @@ void rarch_main_data_overlay_iterate(bool is_thread, void *data) #ifdef HAVE_THREADS if (is_thread) - slock_lock(runloop->overlay_lock); + slock_lock(overlay_lock); #endif driver = driver_get_ptr(); @@ -92,6 +96,20 @@ void rarch_main_data_overlay_iterate(bool is_thread, void *data) end: ; #ifdef HAVE_THREADS if (is_thread) - slock_unlock(runloop->overlay_lock); + slock_unlock(overlay_lock); +#endif +} + +void rarch_main_data_overlay_thread_uninit(void) +{ +#ifdef HAVE_THREADS + slock_free(overlay_lock); +#endif +} + +void rarch_main_data_overlay_thread_init(void) +{ +#ifdef HAVE_THREADS + overlay_lock = slock_new(); #endif } diff --git a/tasks/tasks.h b/tasks/tasks.h index 68275f4dae..f01c46535d 100644 --- a/tasks/tasks.h +++ b/tasks/tasks.h @@ -100,6 +100,10 @@ void rarch_main_data_overlay_image_upload_iterate(bool is_thread, void *data); void rarch_main_data_overlay_iterate(bool is_thread, void *data); + +void rarch_main_data_overlay_thread_uninit(void); + +void rarch_main_data_overlay_thread_init(void); #endif void rarch_main_data_nbio_iterate(bool is_thread,