The change you suggested seems logic to me.

bye
Norman

Am Dienstag, den 30.05.2006, 17:07 +0000 schrieb Bernd Fondermann
(JIRA):
>     [ 
> http://issues.apache.org/jira/browse/JAMES-512?page=comments#action_12413858 
> ] 
> 
> Bernd Fondermann commented on JAMES-512:
> ----------------------------------------
> 
> shouldn't this
> 
>                 for( int i = 0; i < size; i++ )
>                 {
>                     IOUtil.shutdownStream( (OutputStream)list.get( 0 ) );
>                 }
> 
> be
> 
>                 for( int i = 0; i < size; i++ )
>                 {
>                     IOUtil.shutdownStream( (OutputStream)list.get( i ) );
>                 }
> 
> seems like this is not closing stream 1..(size-1)!
> 
> 
> 
> > OutOfMemoryError -- object not released.
> > ----------------------------------------
> >
> >          Key: JAMES-512
> >          URL: http://issues.apache.org/jira/browse/JAMES-512
> >      Project: James
> >         Type: Bug
> 
> >   Components: MailStore & MailRepository
> >     Versions: 2.2.0
> >  Environment: windows XP,
> > Java 1.5.0_06
> >     Reporter: Quande Ren
> >     Priority: Critical
> >      Fix For: 2.3.0a4
> >  Attachments: picture.GIF
> >
> > I use the file system to store the emails.
> > When I run the James for a long time, the james server used more and more 
> > heap memory, eventually it runs out of memory and refuse to receive email. 
> > only restart the james will work.
> > I used JProfile Memory Debugger(you can get the trial version from 
> > www.quest.com)  and found a clue. the object allocated from following code 
> > at line 92 does not always get released, cause the memory been used up 
> > eventually. I will attach a picture file showing the call stack.
> > 91,            final OutputStream outputStream = getOutputStream( key );
> > 92,            final BufferedOutputStream stream = new 
> > BufferedOutputStream( outputStream );
> > 93
> > 94,            final Object o = m_outputs.get( key );
> > 95,            if( null == o )
> > 96,            {
> > 97,                m_outputs.put( key; stream );
> > 98,            }
> > 99,            else if( o instanceof ArrayList )
> > 100,            {
> > 101,                ( (ArrayList)o ).add( stream );
> > 102,            }
> > 103,            else
> > 104,            {
> > 105,                final ArrayList list = new ArrayList();
> > 106,                list.add( o );
> > 107,                list.add( stream );
> > 108,                m_outputs.put( key; list );
> > 109,            }
> > 110
> > 111,            return stream;
> 

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to