summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2011-03-12 00:35:18 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2011-03-12 00:35:18 +0000
commit8aa90b6b0be0125ba645af30757524055acbb185 (patch)
tree32888a41d6aae1386077884d940c3986b3d12e5a /firmware
parent204ac257fe97dafdcd106c9051386ccf09710c4f (diff)
downloadrockbox-8aa90b6b0be0125ba645af30757524055acbb185.tar.gz
rockbox-8aa90b6b0be0125ba645af30757524055acbb185.zip
Android: allocate native_buffer locally, which does away with the need to hold
a global reference to it (fixes bug). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29576 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/hosted/android/lcd-android.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c
index 172e832c2a..19f077010f 100644
--- a/firmware/target/hosted/android/lcd-android.c
+++ b/firmware/target/hosted/android/lcd-android.c
@@ -34,7 +34,6 @@ static jobject RockboxFramebuffer_instance;
static jmethodID java_lcd_update;
static jmethodID java_lcd_update_rect;
static jmethodID java_lcd_init;
-static jobject native_buffer;
static int dpi;
static int scroll_threshold;
@@ -69,15 +68,17 @@ void connect_with_java(JNIEnv* env, jobject fb_instance)
java_lcd_init = e->GetMethodID(env, fb_class,
"java_lcd_init",
"(IILjava/nio/ByteBuffer;)V");
-
- native_buffer = e->NewDirectByteBuffer(env,
- lcd_framebuffer,
- (jlong)sizeof(lcd_framebuffer));
+
have_class = true;
}
+
+ /* Create native_buffer */
+ jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer,
+ (jlong) sizeof(lcd_framebuffer));
+
/* we need to setup parts for the java object every time */
(*env)->CallVoidMethod(env, fb_instance, java_lcd_init,
- (jint)LCD_WIDTH, (jint)LCD_HEIGHT, native_buffer);
+ (jint)LCD_WIDTH, (jint)LCD_HEIGHT, buffer);
}
/*
@@ -116,8 +117,10 @@ Java_org_rockbox_RockboxFramebuffer_surfaceCreated(JNIEnv *env, jobject this,
jobject surfaceholder)
{
(void)surfaceholder;
+
/* Update RockboxFramebuffer_instance */
RockboxFramebuffer_instance = (*env)->NewGlobalRef(env, this);
+
/* possibly a new instance - reconnect */
connect_with_java(env, this);
display_on = true;