From db10c87b8961779ea76f930d1738b36c729cb9de Mon Sep 17 00:00:00 2001 From: sylar Date: Mon, 16 Mar 2015 18:21:38 +0400 Subject: [PATCH] release jni memory --- apps/openmw/android_commandLine.cpp | 17 ++++++++++++----- apps/openmw/android_main.c | 4 ++-- components/files/androidpath.cpp | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/openmw/android_commandLine.cpp b/apps/openmw/android_commandLine.cpp index 129e63797..ebfff28ca 100644 --- a/apps/openmw/android_commandLine.cpp +++ b/apps/openmw/android_commandLine.cpp @@ -1,20 +1,27 @@ #include "android_commandLine.h" #include "string.h" - - const char **argvData; int argcData; +extern "C" void releaseArgv(); + +void releaseArgv() { + delete[] argvData; +} + JNIEXPORT void JNICALL Java_ui_activity_GameActivity_commandLine(JNIEnv *env, jobject obj, jint argc, jobjectArray stringArray) { jboolean iscopy; argcData = (int) argc; - argvData= new const char * [argcData+1]; + argvData = new const char *[argcData + 1]; argvData[0] = "openmw"; - for (int i = 1; i < argcData+1; i++) { - jstring string = (jstring) (*env).GetObjectArrayElement(stringArray, i-1); + for (int i = 1; i < argcData + 1; i++) { + jstring string = (jstring) (env)->GetObjectArrayElement(stringArray, + i - 1); argvData[i] = (env)->GetStringUTFChars(string, &iscopy); + (env)->DeleteLocalRef(string); } + (env)->DeleteLocalRef(stringArray); } diff --git a/apps/openmw/android_main.c b/apps/openmw/android_main.c index d3a6ca63a..1b2839519 100644 --- a/apps/openmw/android_main.c +++ b/apps/openmw/android_main.c @@ -13,6 +13,7 @@ extern void SDL_Android_Init(JNIEnv* env, jclass cls); extern int argcData; extern const char **argvData; +void releaseArgv(); int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject obj) { @@ -26,8 +27,7 @@ int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, int status; status = main(argcData+1, argvData); - free (argvData); - + releaseArgv(); /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */ /* exit(status); */ diff --git a/components/files/androidpath.cpp b/components/files/androidpath.cpp index 009bd98a2..84886f473 100644 --- a/components/files/androidpath.cpp +++ b/components/files/androidpath.cpp @@ -31,6 +31,7 @@ JNIEXPORT void JNICALL Java_ui_activity_GameActivity_getPathToJni(JNIEnv *env, j { jboolean iscopy; Buffer::setData((env)->GetStringUTFChars(prompt, &iscopy)); + (env)->DeleteLocalRef(prompt); } namespace