diff -r b7ff93fde5bb include/SDL_rwops.h --- a/include/SDL_rwops.h sáb may 12 11:36:16 2012 -0300 +++ b/include/SDL_rwops.h vie may 18 14:27:43 2012 -0300 @@ -85,11 +85,8 @@ #if defined(ANDROID) struct { - void *fileName; void *fileNameRef; - void *inputStream; void *inputStreamRef; - void *readableByteChannel; void *readableByteChannelRef; void *readMethod; long position; diff -r b7ff93fde5bb src/core/android/SDL_android.cpp --- a/src/core/android/SDL_android.cpp sáb may 12 11:36:16 2012 -0300 +++ b/src/core/android/SDL_android.cpp vie may 18 14:27:43 2012 -0300 @@ -423,7 +423,7 @@ allocatedLocalFrame = true; } - fileNameJString = (jstring)ctx->hidden.androidio.fileName; + fileNameJString = (jstring)ctx->hidden.androidio.fileNameRef; // context = SDLActivity.getContext(); mid = mEnv->GetStaticMethodID(mActivityClass, @@ -443,7 +443,6 @@ goto failure; } - ctx->hidden.androidio.inputStream = inputStream; ctx->hidden.androidio.inputStreamRef = mEnv->NewGlobalRef(inputStream); // Despite all the visible documentation on [Asset]InputStream claiming @@ -471,7 +470,6 @@ goto failure; } - ctx->hidden.androidio.readableByteChannel = readableByteChannel; ctx->hidden.androidio.readableByteChannelRef = mEnv->NewGlobalRef(readableByteChannel); @@ -491,6 +489,11 @@ if(ctx->hidden.androidio.inputStreamRef != NULL) { mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.inputStreamRef); } + + if(ctx->hidden.androidio.readableByteChannelRef != NULL) { + mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.readableByteChannelRef); + } + } if (allocatedLocalFrame) { @@ -508,9 +511,9 @@ } jstring fileNameJString = mEnv->NewStringUTF(fileName); - ctx->hidden.androidio.fileName = fileNameJString; ctx->hidden.androidio.fileNameRef = mEnv->NewGlobalRef(fileNameJString); ctx->hidden.androidio.inputStreamRef = NULL; + mEnv->DeleteLocalRef(fileNameJString); return Android_JNI_FileOpen(ctx); @@ -522,7 +525,7 @@ int bytesRemaining = size * maxnum; int bytesRead = 0; - jobject readableByteChannel = (jobject)ctx->hidden.androidio.readableByteChannel; + jobject readableByteChannel = (jobject)ctx->hidden.androidio.readableByteChannelRef; jmethodID readMethod = (jmethodID)ctx->hidden.androidio.readMethod; jobject byteBuffer = mEnv->NewDirectByteBuffer(buffer, bytesRemaining); @@ -565,7 +568,7 @@ mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.fileNameRef); } - jobject inputStream = (jobject)ctx->hidden.androidio.inputStream; + jobject inputStream = (jobject)ctx->hidden.androidio.inputStreamRef; // inputStream.close(); jmethodID mid = mEnv->GetMethodID(mEnv->GetObjectClass(inputStream), @@ -612,7 +615,7 @@ } long movement = newPosition - ctx->hidden.androidio.position; - jobject inputStream = (jobject)ctx->hidden.androidio.inputStream; + jobject inputStream = (jobject)ctx->hidden.androidio.inputStreamRef; if (movement > 0) { unsigned char buffer[1024];