Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
and replacing them for their global equivalents.
This commit is contained in:
parent
4576303b58
commit
f6e83ac6a2
2 changed files with 9 additions and 10 deletions
|
@ -85,11 +85,8 @@ typedef struct SDL_RWops
|
|||
#if defined(ANDROID)
|
||||
struct
|
||||
{
|
||||
void *fileName;
|
||||
void *fileNameRef;
|
||||
void *inputStream;
|
||||
void *inputStreamRef;
|
||||
void *readableByteChannel;
|
||||
void *readableByteChannelRef;
|
||||
void *readMethod;
|
||||
long position;
|
||||
|
|
|
@ -442,7 +442,7 @@ static int Android_JNI_FileOpen(SDL_RWops* ctx)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
fileNameJString = (jstring)ctx->hidden.androidio.fileName;
|
||||
fileNameJString = (jstring)ctx->hidden.androidio.fileNameRef;
|
||||
|
||||
// context = SDLActivity.getContext();
|
||||
mid = mEnv->GetStaticMethodID(mActivityClass,
|
||||
|
@ -462,7 +462,6 @@ static int Android_JNI_FileOpen(SDL_RWops* ctx)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
ctx->hidden.androidio.inputStream = inputStream;
|
||||
ctx->hidden.androidio.inputStreamRef = mEnv->NewGlobalRef(inputStream);
|
||||
|
||||
// Despite all the visible documentation on [Asset]InputStream claiming
|
||||
|
@ -490,7 +489,6 @@ static int Android_JNI_FileOpen(SDL_RWops* ctx)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
ctx->hidden.androidio.readableByteChannel = readableByteChannel;
|
||||
ctx->hidden.androidio.readableByteChannelRef =
|
||||
mEnv->NewGlobalRef(readableByteChannel);
|
||||
|
||||
|
@ -510,6 +508,11 @@ failure:
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -529,7 +532,6 @@ extern "C" int Android_JNI_FileOpen(SDL_RWops* ctx,
|
|||
}
|
||||
|
||||
jstring fileNameJString = mEnv->NewStringUTF(fileName);
|
||||
ctx->hidden.androidio.fileName = fileNameJString;
|
||||
ctx->hidden.androidio.fileNameRef = mEnv->NewGlobalRef(fileNameJString);
|
||||
ctx->hidden.androidio.inputStreamRef = NULL;
|
||||
|
||||
|
@ -547,7 +549,7 @@ extern "C" size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer,
|
|||
return -1;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
@ -593,7 +595,7 @@ static int Android_JNI_FileClose(SDL_RWops* ctx, bool release)
|
|||
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),
|
||||
|
@ -640,7 +642,7 @@ extern "C" long Android_JNI_FileSeek(SDL_RWops* ctx, long offset, int whence)
|
|||
}
|
||||
|
||||
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];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue