diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index 2368bb1f6b..fe0af2675f 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -1156,7 +1156,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetenv)( Functions called by SDL into Java *******************************************************************************/ -static int s_active = 0; +static SDL_atomic_t s_active; struct LocalReferenceHolder { JNIEnv *m_env; @@ -1181,7 +1181,7 @@ static SDL_bool LocalReferenceHolder_Init(struct LocalReferenceHolder *refholder SDL_SetError("Failed to allocate enough JVM local references"); return SDL_FALSE; } - ++s_active; + SDL_AtomicIncRef(&s_active); refholder->m_env = env; return SDL_TRUE; } @@ -1194,10 +1194,15 @@ static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) if (refholder->m_env) { JNIEnv *env = refholder->m_env; (*env)->PopLocalFrame(env, NULL); - --s_active; + SDL_AtomicDecRef(&s_active); } } +static SDL_bool LocalReferenceHolder_IsActive(void) +{ + return (SDL_AtomicGet(&s_active) > 0); +} + ANativeWindow* Android_JNI_GetNativeWindow(void) { ANativeWindow *anw = NULL; @@ -1601,7 +1606,7 @@ static SDL_bool Android_JNI_ExceptionOccurred(SDL_bool silent) jthrowable exception; /* Detect mismatch LocalReferenceHolder_Init/Cleanup */ - SDL_assert((s_active > 0)); + SDL_assert(LocalReferenceHolder_IsActive()); exception = (*env)->ExceptionOccurred(env); if (exception != NULL) {