(Core Info) Ensure current core info is initialized at runloop_event_init_core when netplay is enabled (#14162)

This commit is contained in:
Cthulhu-throwaway 2022-07-09 11:25:27 -03:00 committed by GitHub
parent 285d89b7d9
commit 177691e6fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 31 deletions

View File

@ -5450,23 +5450,32 @@ bool runloop_event_init_core(
float fastforward_ratio = 0.0f; float fastforward_ratio = 0.0f;
rarch_system_info_t *sys_info = &runloop_st->system; rarch_system_info_t *sys_info = &runloop_st->system;
#if defined(HAVE_NETWORKING) && defined(HAVE_UPDATE_CORES) #ifdef HAVE_NETWORKING
/* If netplay is enabled, update the core before initializing. */
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL)) if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL))
{ {
#ifdef HAVE_UPDATE_CORES
/* If netplay is enabled, update the core before initializing. */
const char *path_core = path_get(RARCH_PATH_CORE); const char *path_core = path_get(RARCH_PATH_CORE);
if (!string_is_empty(path_core) && if (!string_is_empty(path_core) &&
!string_is_equal(path_core, "builtin")) !string_is_equal(path_core, "builtin"))
{ {
task_push_update_single_core(path_core, if (task_push_update_single_core(path_core,
settings->bools.core_updater_auto_backup, settings->bools.core_updater_auto_backup,
settings->uints.core_updater_auto_backup_history_size, settings->uints.core_updater_auto_backup_history_size,
settings->paths.directory_libretro, settings->paths.directory_libretro,
settings->paths.directory_core_assets); settings->paths.directory_core_assets))
/* We must wait for the update to finish before starting the core. */ /* We must wait for the update to finish
task_update_installed_cores_wait(); before starting the core. */
task_queue_wait(NULL, NULL);
} }
#endif
/* We need this in order for core_info_current_supports_netplay
to work correctly at init_netplay,
called later at event_init_content. */
command_event(CMD_EVENT_CORE_INFO_INIT, NULL);
command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
} }
#endif #endif

View File

@ -1582,21 +1582,6 @@ static bool task_update_installed_cores_finder(retro_task_t *task, void *user_da
return false; return false;
} }
static bool task_update_installed_cores_waiter(void *data)
{
task_finder_data_t find_data;
find_data.func = task_update_installed_cores_finder;
find_data.userdata = NULL;
return task_queue_find(&find_data);
}
void task_update_installed_cores_wait(void)
{
task_queue_wait(task_update_installed_cores_waiter, NULL);
}
void task_push_update_installed_cores( void task_push_update_installed_cores(
bool auto_backup, size_t auto_backup_history_size, bool auto_backup, size_t auto_backup_history_size,
const char *path_dir_libretro, const char *path_dir_libretro,
@ -1677,7 +1662,7 @@ error:
free_update_installed_cores_handle(update_installed_handle); free_update_installed_cores_handle(update_installed_handle);
} }
void task_push_update_single_core( bool task_push_update_single_core(
const char *path_core, bool auto_backup, size_t auto_backup_history_size, const char *path_core, bool auto_backup, size_t auto_backup_history_size,
const char *path_dir_libretro, const char *path_dir_core_assets) const char *path_dir_libretro, const char *path_dir_core_assets)
{ {
@ -1687,19 +1672,19 @@ void task_push_update_single_core(
retro_task_t *task; retro_task_t *task;
if (string_is_empty(path_core) || string_is_empty(path_dir_libretro)) if (string_is_empty(path_core) || string_is_empty(path_dir_libretro))
return; return false;
#ifdef ANDROID #ifdef ANDROID
/* Regular core updater is disabled in Play Store builds. */ /* Regular core updater is disabled in Play Store builds. */
if (play_feature_delivery_enabled()) if (play_feature_delivery_enabled())
return; return false;
#endif #endif
/* Only one instance of this task may run at a time. */ /* Only one instance of this task may run at a time. */
find_data.func = task_update_installed_cores_finder; find_data.func = task_update_installed_cores_finder;
find_data.userdata = NULL; find_data.userdata = NULL;
if (task_queue_find(&find_data)) if (task_queue_find(&find_data))
return; return false;
core_list = core_updater_list_init(); core_list = core_updater_list_init();
handle = (update_single_core_handle_t*)malloc(sizeof(*handle)); handle = (update_single_core_handle_t*)malloc(sizeof(*handle));
@ -1710,7 +1695,7 @@ void task_push_update_single_core(
free(handle); free(handle);
free(task); free(task);
return; return false;
} }
/* Configure handle */ /* Configure handle */
@ -1734,6 +1719,8 @@ void task_push_update_single_core(
/* Push task */ /* Push task */
task_queue_push(task); task_queue_push(task);
return true;
} }
#if defined(ANDROID) #if defined(ANDROID)

View File

@ -112,10 +112,9 @@ void task_push_update_installed_cores(
bool auto_backup, size_t auto_backup_history_size, bool auto_backup, size_t auto_backup_history_size,
const char *path_dir_libretro, const char *path_dir_libretro,
const char *path_dir_core_assets); const char *path_dir_core_assets);
void task_push_update_single_core( bool task_push_update_single_core(
const char *path_core, bool auto_backup, size_t auto_backup_history_size, const char *path_core, bool auto_backup, size_t auto_backup_history_size,
const char *path_dir_libretro, const char *path_dir_core_assets); const char *path_dir_libretro, const char *path_dir_core_assets);
void task_update_installed_cores_wait(void);
#if defined(ANDROID) #if defined(ANDROID)
void *task_push_play_feature_delivery_core_install( void *task_push_play_feature_delivery_core_install(
core_updater_list_t* core_list, core_updater_list_t* core_list,