[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug awt/27917] Massive memory leak in Graphics2D image operations
From: |
cvs-commit at developer dot classpath dot org |
Subject: |
[Bug awt/27917] Massive memory leak in Graphics2D image operations |
Date: |
7 Jun 2006 09:41:55 -0000 |
------- Comment #5 from cvs-commit at developer dot classpath dot org
2006-06-07 09:41 -------
Subject: Bug 27917
CVSROOT: /cvsroot/classpath
Module name: classpath
Changes by: Mark Wielaard <mark> 06/06/07 09:40:54
Modified files:
. : ChangeLog
gnu/java/awt/peer/gtk: CairoSurface.java ComponentGraphics.java
native/jni/gtk-peer: gnu_java_awt_peer_gtk_CairoGraphics2D.c
gnu_java_awt_peer_gtk_CairoSurface.c
gnu_java_awt_peer_gtk_ComponentGraphics.c
include : gnu_java_awt_peer_gtk_CairoGraphics2D.h
gnu_java_awt_peer_gtk_CairoSurface.h
gnu_java_awt_peer_gtk_ComponentGraphics.h
Log message:
PR 27917
* gnu/java/awt/peer/gtk/CairoSurface.java (finalize): Call
dispose.
* gnu/java/awt/peer/gtk/ComponentGraphics.java: Override dispose
to
call disposeSurface.
(disposeSurface): New native method.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Free
pattern_pixels.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
(Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface): Call
cairo_pattern_destroy.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
(Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface):
New function to destroy the surface.
* include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated.
* include/gnu_java_awt_peer_gtk_CairoSurface.h: Likewise.
* include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Likewise.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7691&r2=1.7692
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/CairoSurface.java?cvsroot=classpath&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java?cvsroot=classpath&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c?cvsroot=classpath&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c?cvsroot=classpath&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c?cvsroot=classpath&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h?cvsroot=classpath&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_CairoSurface.h?cvsroot=classpath&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h?cvsroot=classpath&r1=1.4&r2=1.5
Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/classpath/classpath/ChangeLog,v
retrieving revision 1.7691
retrieving revision 1.7692
diff -u -b -r1.7691 -r1.7692
--- ChangeLog 7 Jun 2006 08:04:48 -0000 1.7691
+++ ChangeLog 7 Jun 2006 09:40:53 -0000 1.7692
@@ -8,6 +8,26 @@
2006-06-06 Mark Wielaard <address@hidden>
+ PR 27917
+ * gnu/java/awt/peer/gtk/CairoSurface.java (finalize): Call dispose.
+ * gnu/java/awt/peer/gtk/ComponentGraphics.java: Override dispose to
+ call disposeSurface.
+ (disposeSurface): New native method.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
+ (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Free
+ pattern_pixels.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
+ (Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface): Call
+ cairo_pattern_destroy.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+ (Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface):
+ New function to destroy the surface.
+ * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated.
+ * include/gnu_java_awt_peer_gtk_CairoSurface.h: Likewise.
+ * include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Likewise.
+
+2006-06-06 Mark Wielaard <address@hidden>
+
* include/jni.h (JDK1_1InitArgs): Mark pointer-to-function types
with JNICALL.
Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- gnu/java/awt/peer/gtk/CairoSurface.java 4 Jun 2006 19:44:39 -0000
1.6
+++ gnu/java/awt/peer/gtk/CairoSurface.java 7 Jun 2006 09:40:54 -0000
1.7
@@ -199,6 +199,14 @@
}
/**
+ * Call dispose() to clean up any native resources allocated.
+ */
+ protected void finalize()
+ {
+ dispose();
+ }
+
+ /**
* Return a GtkImage from this Cairo surface.
*/
public GtkImage getGtkImage()
Index: gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- gnu/java/awt/peer/gtk/ComponentGraphics.java 6 Jun 2006 02:22:28
-0000 1.10
+++ gnu/java/awt/peer/gtk/ComponentGraphics.java 7 Jun 2006 09:40:54
-0000 1.11
@@ -99,6 +99,21 @@
private native long initState(GtkComponentPeer component);
/**
+ * Destroys the component surface and calls dispose on the cairo
+ * graphics2d to destroy any super class resources.
+ */
+ public void dispose()
+ {
+ disposeSurface(nativePointer);
+ super.dispose();
+ }
+
+ /**
+ * 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: native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c 3 Jun 2006
22:47:03 -0000 1.6
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c 7 Jun 2006
09:40:54 -0000 1.7
@@ -124,6 +124,10 @@
cairo_surface_destroy (gr->pattern_surface);
gr->pattern_surface = NULL;
+ if (gr->pattern_pixels)
+ g_free(gr->pattern_pixels);
+ gr->pattern_pixels = NULL;
+
g_free( gr );
}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c 4 Jun 2006
19:44:39 -0000 1.15
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c 7 Jun 2006
09:40:54 -0000 1.16
@@ -203,6 +203,7 @@
cairo_set_source(cr, p);
cairo_paint(cr);
+ cairo_pattern_destroy(p);
}
(*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c 6 Jun
2006 02:22:28 -0000 1.13
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c 7 Jun
2006 09:40:54 -0000 1.14
@@ -54,6 +54,8 @@
#include "gnu_java_awt_peer_gtk_ComponentGraphics.h"
+#include "cairographics2d.h"
+
static short flush_scheduled = 0;
static gboolean flush (gpointer data __attribute__((unused)))
@@ -163,6 +165,30 @@
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)
+ cairo_surface_destroy (surface);
+}
+
JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile
(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__
((unused)),
Index: include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- include/gnu_java_awt_peer_gtk_CairoGraphics2D.h 3 Jun 2006 22:47:03
-0000 1.2
+++ include/gnu_java_awt_peer_gtk_CairoGraphics2D.h 7 Jun 2006 09:40:54
-0000 1.3
@@ -34,8 +34,8 @@
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip
(JNIEnv *env, jobject);
-JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env,
jobject);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip (JNIEnv *env,
jobject);
+JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env,
jobject);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter (JNIEnv *env,
jobject, jint);
#ifdef __cplusplus
Index: include/gnu_java_awt_peer_gtk_CairoSurface.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_CairoSurface.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- include/gnu_java_awt_peer_gtk_CairoSurface.h 4 Jun 2006 19:44:39
-0000 1.2
+++ include/gnu_java_awt_peer_gtk_CairoSurface.h 7 Jun 2006 09:40:54
-0000 1.3
@@ -17,8 +17,8 @@
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface
(JNIEnv *env, jobject, jobject, jdoubleArray);
JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_getPixels
(JNIEnv *env, jobject, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_setPixels
(JNIEnv *env, jobject, jintArray);
-JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_CairoSurface_newCairoContext (JNIEnv *env, jobject);
JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_CairoSurface_getFlippedBuffer (JNIEnv *env, jobject,
jint);
+JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_CairoSurface_newCairoContext (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_copyAreaNative
(JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint, jint);
#ifdef __cplusplus
Index: include/gnu_java_awt_peer_gtk_ComponentGraphics.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- include/gnu_java_awt_peer_gtk_ComponentGraphics.h 6 Jun 2006 02:22:28
-0000 1.4
+++ include/gnu_java_awt_peer_gtk_ComponentGraphics.h 7 Jun 2006 09:40:54
-0000 1.5
@@ -11,7 +11,8 @@
#endif
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initState
(JNIEnv *env, jobject, jobject);
-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_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);
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphics_hasXRender (JNIEnv *env, jclass);
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27917
- [Bug awt/27917] New: Massive memory leak in Graphics2D image operations, hendrich at informatik dot uni-hamburg dot de, 2006/06/06
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, mark at gcc dot gnu dot org, 2006/06/06
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, mark at gcc dot gnu dot org, 2006/06/06
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, hendrich at informatik dot uni-hamburg dot de, 2006/06/06
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, mark at gcc dot gnu dot org, 2006/06/06
- [Bug awt/27917] Massive memory leak in Graphics2D image operations,
cvs-commit at developer dot classpath dot org <=
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, hendrich at informatik dot uni-hamburg dot de, 2006/06/07
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, cvs-commit at developer dot classpath dot org, 2006/06/08
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, mark at gcc dot gnu dot org, 2006/06/08
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, hendrich at informatik dot uni-hamburg dot de, 2006/06/08
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, mark at gcc dot gnu dot org, 2006/06/11
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, hendrich at informatik dot uni-hamburg dot de, 2006/06/13
- [Bug awt/27917] Massive memory leak in Graphics2D image operations, sven at physto dot se, 2006/06/13