This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[RFA] Hang in GTK peers
- From: Francis Kung <fkung at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Wed, 11 Apr 2007 17:18:38 -0400
- Subject: [RFA] Hang in GTK peers
Hi,
This patch fixes a bug in the GTK peers that can potentially hang the
system's X server; it's already gone into upstream Classpath.
Can someone check this and commit it?
Thanks,
Francis
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
===================================================================
--- libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c (revision 123696)
+++ libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c (working copy)
@@ -1,5 +1,5 @@
/* gnu_java_awt_peer_gtk_ComponentGraphics.c
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -159,40 +159,13 @@
cr = cairo_create (surface);
g_assert(cr != NULL);
+ cairo_surface_destroy(surface);
gdk_threads_leave();
return PTR_TO_JLONG(cr);
}
-/**
- * Disposes of the surface
- */
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface
- (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
- jlong value)
-{
- struct cairographics2d *gr;
- cairo_surface_t *surface;
-
- gr = JLONG_TO_PTR(struct cairographics2d, value);
-
- if (gr == NULL)
- return;
-
- if (gr->cr == NULL)
- return;
-
- surface = cairo_get_target (gr->cr);
- if (surface != NULL)
- {
- gdk_threads_enter();
- cairo_surface_destroy (surface);
- gdk_threads_leave();
- }
-}
-
JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile
(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
@@ -224,6 +197,7 @@
cr = cairo_create (surface);
g_assert(cr != NULL);
+ cairo_surface_destroy(surface);
gdk_threads_leave();
Index: libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
--- libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java (revision 123696)
+++ libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java (working copy)
@@ -139,21 +139,6 @@
}
/**
- * Destroys the component surface and calls dispose on the cairo
- * graphics2d to destroy any super class resources.
- */
- public void dispose()
- {
- super.dispose();
- disposeSurface(nativePointer);
- }
-
- /**
- * Destroys the component surface.
- */
- private native void disposeSurface(long nativePointer);
-
- /**
* Creates a cairo_t for a volatile image
*/
protected native long initFromVolatile( long pixmapPtr, int width, int height);
Index: libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
===================================================================
--- libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h (revision 123696)
+++ libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h (working copy)
@@ -11,7 +11,6 @@
#endif
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initState (JNIEnv *env, jobject, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface (JNIEnv *env, jobject, jlong);
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile (JNIEnv *env, jobject, jlong, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_start_1gdk_1drawing (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_end_1gdk_1drawing (JNIEnv *env, jobject);