vgritsenko    01/08/15 18:35:26

  Modified:    src/org/apache/cocoon/sitemap SitemapComponentSelector.java
  Log:
  patching memory leaks. taken excalibur's approach to store component-handler mapping.
  
  Revision  Changes    Path
  1.7       +12 -9     
xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapComponentSelector.java
  
  Index: SitemapComponentSelector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapComponentSelector.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SitemapComponentSelector.java     2001/07/29 11:08:03     1.6
  +++ SitemapComponentSelector.java     2001/08/16 01:35:26     1.7
  @@ -23,17 +23,21 @@
   /** Default component manager for Cocoon's sitemap components.
    * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Giacomo Pati</a>
  - * @version CVS $Id: SitemapComponentSelector.java,v 1.6 2001/07/29 11:08:03 
cziegeler Exp $
  + * @version CVS $Id: SitemapComponentSelector.java,v 1.7 2001/08/16 01:35:26 
vgritsenko Exp $
    */
   public class SitemapComponentSelector extends ExcaliburComponentSelector {
       private Map mime_types;
       private SitemapComponentSelector parentSelector;
   
  +    /** Dynamic component handlers mapping. */
  +    private Map componentMapping;
  +
       /** The conctructors (same as the Avalon ComponentManager)
        */
       public SitemapComponentSelector() {
           super();
           this.mime_types = new HashMap();
  +        componentMapping = Collections.synchronizedMap(new HashMap());
       }
   
       public void setParentSelector(SitemapComponentSelector newSelector) {
  @@ -50,6 +54,7 @@
           } catch (ComponentException ce) {
               if (this.parentSelector != null) {
                   component = this.parentSelector.select(hint);
  +                componentMapping.put(component, this.parentSelector);
               } else {
                   throw ce;
               }
  @@ -59,14 +64,12 @@
       }
   
       public void release(Component component) {
  -        // FIXME (CZ)
  -        // Is this alright, to release the component using both
  -        // selectors?
  -        // But at this stage we don't know which selector
  -        // was used to select the component!
  -        super.release(component);
  -        if (this.parentSelector != null) {
  -            this.parentSelector.release(component);
  +        SitemapComponentSelector selector = 
(SitemapComponentSelector)componentMapping.get(component);
  +        if(selector != null) {
  +            componentMapping.remove(component);
  +            selector.release(component);
  +        } else {
  +            super.release(component);
           }
       }
   
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to