This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]