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