You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-commits@xmlgraphics.apache.org by ca...@apache.org on 2007/02/04 08:25:22 UTC
svn commit: r503369 - in /xmlgraphics/batik/trunk:
sources/org/apache/batik/gvt/flow/ test-sources/org/apache/batik/swing/
Author: cam
Date: Sat Feb 3 23:25:21 2007
New Revision: 503369
URL: http://svn.apache.org/viewvc?view=rev&rev=503369
Log:
1. Fixed memory leak test to avoid false positives.
2. Avoid NPE in gvt/flow/FlowTextPainter.java.
Modified:
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/flow/FlowTextPainter.java
xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGCanvasHandler.java
xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGMemoryLeakTest.java
xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/NullSetSVGDocumentTest.java
Modified: xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/flow/FlowTextPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/flow/FlowTextPainter.java?view=diff&rev=503369&r1=503368&r2=503369
==============================================================================
--- xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/flow/FlowTextPainter.java (original)
+++ xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/flow/FlowTextPainter.java Sat Feb 3 23:25:21 2007
@@ -262,22 +262,26 @@
return overflow;
}
- static int [] allocWordMap(int [] wordMap, int sz) {
+ static int[] allocWordMap(int[] wordMap, int sz) {
if (wordMap != null) {
- if (sz <= wordMap.length)
+ if (sz <= wordMap.length) {
return wordMap;
- if (sz < wordMap.length*2)
- sz = wordMap.length*2;
+ }
+ if (sz < wordMap.length * 2) {
+ sz = wordMap.length * 2;
+ }
}
// we have a problem when wordMap actually IS null....
- int [] ret = new int[sz];
- int ext=0;
- if (wordMap != null)
- ext = wordMap.length;
- if (sz < ext) ext = sz;
- System.arraycopy( wordMap, 0, ret, 0, ext );
- Arrays.fill( ret, ext, sz, -1 );
+ int[] ret = new int[sz];
+ int ext = wordMap != null ? wordMap.length : 0;
+ if (sz < ext) {
+ ext = sz;
+ }
+ if (ext != 0) {
+ System.arraycopy(wordMap, 0, ret, 0, ext);
+ }
+ Arrays.fill(ret, ext, sz, -1);
return ret;
}
Modified: xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGCanvasHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGCanvasHandler.java?view=diff&rev=503369&r1=503368&r2=503369
==============================================================================
--- xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGCanvasHandler.java (original)
+++ xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGCanvasHandler.java Sat Feb 3 23:25:21 2007
@@ -23,6 +23,7 @@
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
+import java.lang.ref.WeakReference;
import javax.swing.JFrame;
@@ -107,7 +108,7 @@
JFrame frame = null;
JSVGCanvas canvas = null;
- UpdateManager updateManager = null;
+ WeakReference updateManager = null;
WindowListener wl = null;
InitialRenderListener irl = null;
LoadListener ll = null;
@@ -156,7 +157,7 @@
checkRender();
if ( abort) return;
- if (updateManager == null)
+ if (updateManager == null || updateManager.get() == null)
return;
while (!done) {
@@ -213,8 +214,9 @@
public void scriptDone() {
Runnable r = new Runnable() {
public void run() {
- if (updateManager != null)
- updateManager.forceRepaint();
+ UpdateManager um = getUpdateManager();
+ if (um != null)
+ um.forceRepaint();
synchronized(renderMonitor) {
done = true;
failed = false;
@@ -222,13 +224,14 @@
}
}
};
- if ((updateManager == null) ||
- (!updateManager.isRunning())){
+ UpdateManager um = getUpdateManager();
+ if ((um == null) ||
+ (!um.isRunning())){
// Don't run it in this thread or we deadlock the event queue.
Thread t = new Thread(r);
t.start();
} else {
- updateManager.getUpdateRunnableQueue().invokeLater(r);
+ um.getUpdateRunnableQueue().invokeLater(r);
}
}
@@ -286,10 +289,11 @@
}
public void bindHost() {
+ UpdateManager um = getUpdateManager();
RunnableQueue rq;
- rq = updateManager.getUpdateRunnableQueue();
+ rq = um.getUpdateRunnableQueue();
rq.invokeLater(new Runnable() {
- UpdateManager um = updateManager;
+ UpdateManager um = getUpdateManager();
public void run() {
ScriptingEnvironment scriptEnv;
scriptEnv = um.getScriptingEnvironment();
@@ -306,6 +310,13 @@
});
}
+ protected UpdateManager getUpdateManager() {
+ if (updateManager != null) {
+ return (UpdateManager) updateManager.get();
+ }
+ return null;
+ }
+
class UpdateRenderListener implements UpdateManagerListener {
public void updateCompleted(UpdateManagerEvent e) {
synchronized(renderMonitor){
@@ -374,9 +385,10 @@
public void svgLoadEventDispatchStarted(SVGLoadEventDispatcherEvent e){
SVGLoadEventDispatcher dispatcher;
dispatcher = (SVGLoadEventDispatcher)e.getSource();
- updateManager = dispatcher.getUpdateManager();
+ UpdateManager um = dispatcher.getUpdateManager();
+ updateManager = new WeakReference(um);
url = new UpdateRenderListener();
- updateManager.addUpdateManagerListener(url);
+ um.addUpdateManagerListener(url);
}
}
Modified: xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGMemoryLeakTest.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGMemoryLeakTest.java?view=diff&rev=503369&r1=503368&r2=503369
==============================================================================
--- xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGMemoryLeakTest.java (original)
+++ xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/JSVGMemoryLeakTest.java Sat Feb 3 23:25:21 2007
@@ -20,6 +20,7 @@
import java.io.File;
import java.net.MalformedURLException;
+import java.lang.ref.WeakReference;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
@@ -55,7 +56,19 @@
boolean done;
JSVGCanvasHandler handler;
JFrame theFrame;
- JSVGCanvas theCanvas;
+
+ /**
+ * A WeakReference to the JSVGCanvas.
+ */
+ WeakReference theCanvas;
+
+ protected void setTheCanvas(JSVGCanvas c) {
+ theCanvas = new WeakReference(c);
+ }
+
+ protected JSVGCanvas getTheCanvas() {
+ return (JSVGCanvas) theCanvas.get();
+ }
public static String fmt(String key, Object []args) {
return TestMessages.formatMessage(key, args);
@@ -74,8 +87,8 @@
SwingUtilities.invokeAndWait( new Runnable() {
public void run() {
// System.out.println("In Invoke");
- theFrame.remove(theCanvas);
- theCanvas.dispose();
+ theFrame.remove(getTheCanvas());
+ getTheCanvas().dispose();
theFrame.dispose();
theFrame=null;
@@ -119,7 +132,7 @@
public void registerElement(Element e, String desc) {
registerObjectDesc(e, desc);
- UpdateManager um = theCanvas.getUpdateManager();
+ UpdateManager um = getTheCanvas().getUpdateManager();
BridgeContext bc = um.getBridgeContext();
GraphicsNode gn = bc.getGraphicsNode(e);
if (gn != null)
@@ -134,7 +147,7 @@
}
public void registerResourceContext(String uriSubstring, String desc) {
- UpdateManager um = theCanvas.getUpdateManager();
+ UpdateManager um = getTheCanvas().getUpdateManager();
BridgeContext bc = um.getBridgeContext();
BridgeContext[] ctxs = bc.getChildContexts();
for (int i = 0; i < ctxs.length; i++) {
@@ -152,7 +165,7 @@
/* JSVGCanvasHandler.Delegate Interface */
public boolean canvasInit(JSVGCanvas canvas) {
// System.err.println("In Init");
- theCanvas = canvas;
+ setTheCanvas(canvas);
theFrame = handler.getFrame();
File f = new File(getId());
Modified: xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/NullSetSVGDocumentTest.java
URL: http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/NullSetSVGDocumentTest.java?view=diff&rev=503369&r1=503368&r2=503369
==============================================================================
--- xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/NullSetSVGDocumentTest.java (original)
+++ xmlgraphics/batik/trunk/test-sources/org/apache/batik/swing/NullSetSVGDocumentTest.java Sat Feb 3 23:25:21 2007
@@ -84,7 +84,7 @@
/* JSVGCanvasHandler.Delegate Interface */
public boolean canvasInit(JSVGCanvas canvas) {
- theCanvas = canvas;
+ setTheCanvas(canvas);
theFrame = handler.getFrame();
canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);