From 18af560a43ba0d2862ce8781fe1566766bc0dd0a Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 31 Dec 2025 17:36:29 +0100 Subject: [PATCH] [android] try fix playtime datarace (using nullptr) by just zealously checking for nullptr (#2809) Very haphazardly made fix Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2809 Reviewed-by: crueter Reviewed-by: DraVee Reviewed-by: Maufeat Co-authored-by: lizzie Co-committed-by: lizzie --- src/android/app/src/main/jni/native.cpp | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index f28f4a9b7b..9d2a76566c 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -1166,11 +1166,8 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeEmptyUserDirectory(JNIEnv* void Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerInit(JNIEnv* env, jobject obj) { // for some reason the full user directory isnt initialized in Android, so we need to create it const auto play_time_dir = Common::FS::GetEdenPath(Common::FS::EdenPath::PlayTimeDir); - if (!Common::FS::IsDir(play_time_dir)) { - if (!Common::FS::CreateDir(play_time_dir)) { - LOG_WARNING(Frontend, "Failed to create play time directory"); - } - } + if (!Common::FS::IsDir(play_time_dir) && !Common::FS::CreateDir(play_time_dir)) + LOG_WARNING(Frontend, "Failed to create play time directory"); play_time_manager = std::make_unique(); } @@ -1183,13 +1180,16 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerStart(JNIEnv* env, job } void Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerStop(JNIEnv* env, jobject obj) { - play_time_manager->Stop(); + if (play_time_manager) + play_time_manager->Stop(); } -jlong Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerGetPlayTime(JNIEnv* env, jobject obj, - jstring jprogramId) { - u64 program_id = EmulationSession::GetProgramId(env, jprogramId); - return play_time_manager->GetPlayTime(program_id); +jlong Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerGetPlayTime(JNIEnv* env, jobject obj, jstring jprogramId) { + if (play_time_manager) { + u64 program_id = EmulationSession::GetProgramId(env, jprogramId); + return play_time_manager->GetPlayTime(program_id); + } + return 0UL; } jlong Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerGetCurrentTitleId(JNIEnv* env, @@ -1199,17 +1199,17 @@ jlong Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerGetCurrentTitleId(JNI void Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerResetProgramPlayTime(JNIEnv* env, jobject obj, jstring jprogramId) { - u64 program_id = EmulationSession::GetProgramId(env, jprogramId); if (play_time_manager) { + u64 program_id = EmulationSession::GetProgramId(env, jprogramId); play_time_manager->ResetProgramPlayTime(program_id); } } void Java_org_yuzu_yuzu_1emu_NativeLibrary_playTimeManagerSetPlayTime(JNIEnv* env, jobject obj, jstring jprogramId, jlong playTimeSeconds) { - u64 program_id = EmulationSession::GetProgramId(env, jprogramId); if (play_time_manager) { - play_time_manager->SetPlayTime(program_id, static_cast(playTimeSeconds)); + u64 program_id = EmulationSession::GetProgramId(env, jprogramId); + play_time_manager->SetPlayTime(program_id, u64(playTimeSeconds)); } }