diff --git a/retroarch.c b/retroarch.c index 6a7827b7e3..3d8c856cf0 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2086,6 +2086,10 @@ struct rarch_state #endif #endif +#ifdef HAVE_THREAD_STORAGE + sthread_tls_t rarch_tls; +#endif + #ifdef HAVE_AUDIOMIXER struct audio_mixer_stream audio_mixer_streams[AUDIO_MIXER_MAX_SYSTEM_STREAMS]; @@ -2100,6 +2104,8 @@ struct rarch_state rarch_timer_t shader_delay_timer; #endif + jmp_buf error_sjlj_context; + struct retro_subsystem_rom_info subsystem_data_roms[SUBSYSTEM_MAX_SUBSYSTEMS] [SUBSYSTEM_MAX_SUBSYSTEM_ROMS]; @@ -2224,14 +2230,11 @@ static struct retro_callbacks retro_ctx; static struct retro_core_t current_core; static struct rarch_state rarch_st; -static jmp_buf error_sjlj_context; - #ifdef HAVE_THREAD_STORAGE -static sthread_tls_t rarch_tls; -const void *MAGIC_POINTER = (void*)(uintptr_t)0x0DEFACED; +const void *MAGIC_POINTER = (void*)(uintptr_t)0x0DEFACED; #endif -static runloop_core_status_msg_t runloop_core_status_msg = +static runloop_core_status_msg_t runloop_core_status_msg = { "", 0, @@ -2240,14 +2243,14 @@ static runloop_core_status_msg_t runloop_core_status_msg = }; #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL) -static bool shader_presets_need_reload = true; +static bool shader_presets_need_reload = true; #endif -static bool video_driver_window_title_update = true; +static bool video_driver_window_title_update = true; #ifdef HAVE_RUNAHEAD -static bool runahead_video_driver_is_active = true; -static bool runahead_available = true; -static bool runahead_secondary_core_available = true; -static bool runahead_force_input_dirty = true; +static bool runahead_video_driver_is_active = true; +static bool runahead_available = true; +static bool runahead_secondary_core_available = true; +static bool runahead_force_input_dirty = true; #endif @@ -2256,10 +2259,10 @@ static bool runahead_force_input_dirty = true; extern u32 __nx_applet_type; #endif -static midi_driver_t *midi_drv = &midi_null; -static const video_display_server_t *current_display_server = &dispserv_null; +static midi_driver_t *midi_drv = &midi_null; +static const video_display_server_t *current_display_server = &dispserv_null; -struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = { +struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = { { "4:3", 1.3333f }, { "16:9", 1.7778f }, { "16:10", 1.6f }, @@ -2293,6 +2296,7 @@ static gfx_api_gpu_map gpu_map[] = { { GFX_CTX_DIRECT3D12_API, NULL } }; +/* TODO/FIXME - turn these into static global variable */ const struct input_bind_map input_config_bind_map[RARCH_BIND_LIST_END_NULL] = { DECLARE_BIND(b, RETRO_DEVICE_ID_JOYPAD_B, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B), DECLARE_BIND(y, RETRO_DEVICE_ID_JOYPAD_Y, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y), @@ -2381,8 +2385,6 @@ const struct input_bind_map input_config_bind_map[RARCH_BIND_LIST_END_NULL] = { DECLARE_META_BIND(2, streaming_toggle, RARCH_STREAMING_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE), DECLARE_META_BIND(2, ai_service, RARCH_AI_SERVICE, MENU_ENUM_LABEL_VALUE_INPUT_META_AI_SERVICE), }; - -/* TODO/FIXME - turn these into static global variable */ #ifdef HAVE_DISCORD bool discord_is_inited = false; #endif @@ -2393,7 +2395,6 @@ struct retro_keybind input_config_binds[MAX_USERS][RARCH_BIND_LIST_END]; struct retro_keybind input_autoconf_binds[MAX_USERS][RARCH_BIND_LIST_END]; struct retro_subsystem_info subsystem_data[SUBSYSTEM_MAX_SUBSYSTEMS]; - /* Forward declarations */ static void retroarch_fail(int error_code, const char *error); static void retroarch_core_options_intl_init(const struct @@ -9187,8 +9188,8 @@ int rarch_main(int argc, char *argv[], void *data) driver_uninit(DRIVERS_CMD_ALL); #ifdef HAVE_THREAD_STORAGE - sthread_tls_create(&rarch_tls); - sthread_tls_set(&rarch_tls, MAGIC_POINTER); + sthread_tls_create(&p_rarch->rarch_tls); + sthread_tls_set(&p_rarch->rarch_tls, MAGIC_POINTER); #endif p_rarch->video_driver_active = true; p_rarch->audio_driver_active = true; @@ -27546,7 +27547,7 @@ bool retroarch_main_init(int argc, char *argv[]) p_rarch->video_driver_active = true; p_rarch->audio_driver_active = true; - if (setjmp(error_sjlj_context) > 0) + if (setjmp(p_rarch->error_sjlj_context) > 0) { RARCH_ERR("%s: \"%s\"\n", msg_hash_to_str(MSG_FATAL_ERROR_RECEIVED_IN), p_rarch->error_string); @@ -27771,7 +27772,8 @@ error: static bool retroarch_is_on_main_thread(void) { #ifdef HAVE_THREAD_STORAGE - if (sthread_tls_get(&rarch_tls) != MAGIC_POINTER) + struct rarch_state *p_rarch = &rarch_st; + if (sthread_tls_get(&p_rarch->rarch_tls) != MAGIC_POINTER) return false; #endif return true; @@ -28252,7 +28254,7 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data) p_rarch->rarch_is_inited = false; #ifdef HAVE_THREAD_STORAGE - sthread_tls_delete(&rarch_tls); + sthread_tls_delete(&p_rarch->rarch_tls); #endif break; #ifdef HAVE_CONFIGFILE @@ -28917,7 +28919,7 @@ static void retroarch_fail(int error_code, const char *error) strlcpy(p_rarch->error_string, error, sizeof(p_rarch->error_string)); - longjmp(error_sjlj_context, error_code); + longjmp(p_rarch->error_sjlj_context, error_code); } bool retroarch_main_quit(void)