You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2005/08/16 09:33:10 UTC

svn commit: r232950 - /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java

Author: jeremias
Date: Tue Aug 16 00:33:05 2005
New Revision: 232950

URL: http://svn.apache.org/viewcvs?rev=232950&view=rev
Log:
Notify image cache about the expiration of a user agent (i.e. processing run).

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java   (contents, props changed)

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java?rev=232950&r1=232949&r2=232950&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java Tue Aug 16 00:33:05 2005
@@ -34,6 +34,7 @@
 import org.apache.fop.util.Service;
 import org.apache.fop.fo.ElementMapping.Maker;
 import org.apache.fop.fo.pagination.Root;
+import org.apache.fop.image.ImageFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -88,6 +89,9 @@
     /** The SAX locator object managing the line and column counters */
     private Locator locator; 
     
+    /** The user agent for this processing run. */
+    private FOUserAgent userAgent;
+    
     /**
      * FOTreeBuilder constructor
      * @param renderType output type as defined in Constants class
@@ -98,6 +102,8 @@
     public FOTreeBuilder(int renderType, FOUserAgent foUserAgent, 
         OutputStream stream) throws FOPException {
 
+        this.userAgent = foUserAgent;
+        
         //This creates either an AreaTreeHandler and ultimately a Renderer, or
         //one of the RTF-, MIF- etc. Handlers.
         foEventHandler = RendererFactory.createFOEventHandler(foUserAgent, renderType, stream);
@@ -154,8 +160,8 @@
                 throws IllegalArgumentException {
 
         try {
-            ElementMapping mapping =
-                (ElementMapping)Class.forName(mappingClassName).newInstance();
+            ElementMapping mapping
+                = (ElementMapping)Class.forName(mappingClassName).newInstance();
             addElementMapping(mapping);
         } catch (ClassNotFoundException e) {
             throw new IllegalArgumentException("Could not find "
@@ -220,6 +226,9 @@
             log.debug("Parsing of document complete");
         }
         foEventHandler.endDocument();
+        
+        //Notify the image factory that this user agent has expired.
+        ImageFactory.getInstance().removeContext(this.userAgent);
     }
 
     /**
@@ -311,8 +320,8 @@
 
       if (fobjMaker == null) {
           if (namespaces.contains(namespaceURI.intern())) {
-                throw new FOPException(FONode.errorText(locator) + 
-                    "No element mapping definition found for "
+                throw new FOPException(FONode.errorText(locator) 
+                    + "No element mapping definition found for "
                     + FONode.getNodeString(namespaceURI, localName), locator);
           } else {
               log.warn("Unknown formatting object " + namespaceURI + "^" + localName);
@@ -322,23 +331,17 @@
       return fobjMaker;
     }
 
-    /**
-     * org.xml.sax.ErrorHandler#warning
-     **/
+    /** @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException) */
     public void warning(SAXParseException e) {
         log.warn(e.toString());
     }
 
-    /**
-     * org.xml.sax.ErrorHandler#error
-     **/
+    /** @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException) */
     public void error(SAXParseException e) {
         log.error(e.toString());
     }
 
-    /**
-     * org.xml.sax.ErrorHandler#fatalError
-     **/
+    /** @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException) */
     public void fatalError(SAXParseException e) throws SAXException {
         log.error(e.toString());
         throw e;

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org


Re: svn commit: r232950 - /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java

Posted by Jeremias Maerki <de...@greenmail.ch>.
BTW, although this change was not motivated by this I believe this fixes
a memory leak. But I'll have to verify first. The effect of the
removeContext() call is that all images associated with a user agent
will be moved into a WeakHashMap where they can be picked up by the GC.
If this isn't done the image cache keeps accumulating Context instances
for each processing run.

On 16.08.2005 09:33:10 jeremias wrote:
> Author: jeremias
> Date: Tue Aug 16 00:33:05 2005
> New Revision: 232950
> 
> URL: http://svn.apache.org/viewcvs?rev=232950&view=rev
> Log:
> Notify image cache about the expiration of a user agent (i.e. processing run).
> 
> Modified:
>     xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java   (contents, props changed)
> 
> Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
> URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java?rev=232950&r1=232949&r2=232950&view=diff
> ==============================================================================
> --- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java (original)
> +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java Tue Aug 16 00:33:05 2005
<snip/>
> +        
> +        //Notify the image factory that this user agent has expired.
> +        ImageFactory.getInstance().removeContext(this.userAgent);
<snip/>

Jeremias Maerki