From 8aa90b6b0be0125ba645af30757524055acbb185 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Sat, 12 Mar 2011 00:35:18 +0000 Subject: 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 --- firmware/target/hosted/android/lcd-android.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'firmware/target/hosted') 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; -- cgit v1.2.3