[Top][All Lists]
[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);
}