mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-01-17 14:47:19 +01:00
Android: don't call Android_JNI_ThreadDestroyed() for Java SDLThread
SDLThread is a Java Thread, it's not needed to call 'Detach' from the JVM. Clear mThreadKey, so that the pthread_create destructor is not called for this thread.
This commit is contained in:
parent
42e18bd0c2
commit
9a98e5afe1
@ -292,6 +292,9 @@ static SDL_bool bHasNewData;
|
|||||||
|
|
||||||
static SDL_bool bHasEnvironmentVariables = SDL_FALSE;
|
static SDL_bool bHasEnvironmentVariables = SDL_FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
static void Android_JNI_SetEnv(JNIEnv *env);
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Functions called by JNI
|
Functions called by JNI
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -559,6 +562,10 @@ JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeRunMain)(JNIEnv *env, jclass cls,
|
|||||||
}
|
}
|
||||||
(*env)->ReleaseStringUTFChars(env, library, library_file);
|
(*env)->ReleaseStringUTFChars(env, library, library_file);
|
||||||
|
|
||||||
|
/* This is a Java thread, it doesn't need to be Detached from the JVM.
|
||||||
|
* Set to mThreadKey value to NULL not to call pthread_create destructor 'Android_JNI_ThreadDestroyed' */
|
||||||
|
Android_JNI_SetEnv(NULL);
|
||||||
|
|
||||||
/* Do not issue an exit or the whole application will terminate instead of just the SDL thread */
|
/* Do not issue an exit or the whole application will terminate instead of just the SDL thread */
|
||||||
/* exit(status); */
|
/* exit(status); */
|
||||||
|
|
||||||
@ -1126,7 +1133,14 @@ static void Android_JNI_ThreadDestroyed(void *value)
|
|||||||
JNIEnv *env = (JNIEnv *) value;
|
JNIEnv *env = (JNIEnv *) value;
|
||||||
if (env != NULL) {
|
if (env != NULL) {
|
||||||
(*mJavaVM)->DetachCurrentThread(mJavaVM);
|
(*mJavaVM)->DetachCurrentThread(mJavaVM);
|
||||||
pthread_setspecific(mThreadKey, NULL);
|
Android_JNI_SetEnv(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Android_JNI_SetEnv(JNIEnv *env) {
|
||||||
|
int status = pthread_setspecific(mThreadKey, env);
|
||||||
|
if (status < 0) {
|
||||||
|
__android_log_print(ANDROID_LOG_ERROR, "SDL", "Failed pthread_setspecific() in Android_JNI_SetEnv() (err=%d)", status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,7 +1174,7 @@ JNIEnv* Android_JNI_GetEnv(void)
|
|||||||
* Note: You can call this function any number of times for the same thread, there's no harm in it
|
* Note: You can call this function any number of times for the same thread, there's no harm in it
|
||||||
* (except for some lost CPU cycles)
|
* (except for some lost CPU cycles)
|
||||||
*/
|
*/
|
||||||
pthread_setspecific(mThreadKey, (void *)env);
|
Android_JNI_SetEnv(env);
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user