classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] Re: FYI: GtkSelection.c LocalRef cleanup


From: Christian Thalinger
Subject: [cp-patches] Re: FYI: GtkSelection.c LocalRef cleanup
Date: Sat, 26 Nov 2005 14:19:03 +0100

On Fri, 2005-11-25 at 21:17 +0100, Mark Wielaard wrote:
> 2005-11-25  Mark Wielaard  <address@hidden>
> 
>        Fixes bug #24981
>        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
>        (clipboard_targets_received): DeleteLocalRef of NewStringUTF.
>        (clipboard_text_received): Likewise.
>        (clipboard_uris_received): Likewise.

Nice, but you missed some local refs.  And the bug's not fixed :-)
These are some more i've found, but there is still something left.  The
line where it's out of local refs is:

#2  0x00002aaaab4f5c01 in clipboard_targets_received (clipboard=Variable
"clipboard" is not available.
) at gnu_java_awt_peer_gtk_GtkSelection.c:106

But i don't know where it actually leaks the refs.  Maybe someone else?

TWISTI


2005-11-26  Christian Thalinger  <address@hidden>

        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c 
        (clipboard_get_func): Added missing DeleteLocalRef calls.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c 
        (clipboard_targets_received): Likewise.
        (clipboard_uris_received): Likewise.


Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c,v
retrieving revision 1.18
diff -u -3 -p -r1.18 gnu_java_awt_peer_gtk_GtkClipboard.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c    25 Nov 2005 
15:33:23 -0000      1.18
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c    26 Nov 2005 
13:15:38 -0000
@@ -152,6 +152,7 @@ clipboard_get_func (GtkClipboard *clipbo
                                       gtk_clipboard_instance,
                                       provideContentID,
                                       target_string);
+      (*env)->DeleteLocalRef(env, target_string);
       if (bytes == NULL)
        return;
       len = (*env)->GetArrayLength(env, bytes);
@@ -238,10 +239,13 @@ clipboard_get_func (GtkClipboard *clipbo
          if (uri == NULL)
            break;
          text = (*env)->GetStringUTFChars (env, uri, NULL);
-         if (text == NULL)
+         if (text == NULL) {
+           (*env)->DeleteLocalRef(env, uri);
            break;
+          }
          list[i] = strdup (text);
          (*env)->ReleaseStringUTFChars (env, uri, text);
+         (*env)->DeleteLocalRef(env, uri);
        }
 
       if (i == count)
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c,v
retrieving revision 1.3
diff -u -3 -p -r1.3 gnu_java_awt_peer_gtk_GtkSelection.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c    25 Nov 2005 
20:21:30 -0000      1.3
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c    26 Nov 2005 
13:15:38 -0000
@@ -105,6 +105,8 @@ clipboard_targets_received (GtkClipboard
          stringClass = (*env)->FindClass (env, "java/lang/String");
          strings = (*env)->NewObjectArray (env, strings_len, stringClass,
                                            NULL);
+         (*env)->DeleteLocalRef(env, stringClass);
+
          if (strings != NULL)
            {
              if (include_text)
@@ -133,6 +135,8 @@ clipboard_targets_received (GtkClipboard
                      (*env)->DeleteLocalRef (env, string);
                    }
                }
+
+             (*env)->DeleteLocalRef(env, strings);
            }
 
          for (i = 0; i < targets_len; i++)
@@ -321,6 +325,8 @@ clipboard_uris_received (GtkClipboard *c
        len++;
 
       strings = (*env)->NewObjectArray (env, len, stringClass, NULL);
+      (*env)->DeleteLocalRef(env, stringClass);
+
       if (strings != NULL)
        {
          for (i = 0; i < len; i++)
@@ -331,6 +337,8 @@ clipboard_uris_received (GtkClipboard *c
              (*env)->SetObjectArrayElement (env, strings, i, string);
              (*env)->DeleteLocalRef (env, string);
            }
+
+         (*env)->DeleteLocalRef(env, strings);
        }
       g_strfreev (uris);
     }






reply via email to

[Prev in Thread] Current Thread [Next in Thread]