Harmeet,

Please read the previous emails on this topic.  Your summations are
incorrect.

--Peter

> -----Original Message-----
> From: Harmeet Bedi [mailto:harmeet@;kodemuse.com]
> Sent: Saturday, October 19, 2002 6:01 PM
> To: James Developers List
> Subject: Re: Latest diffs, source code
> 
> There seem to be 3 problems that are being addressed.
> 
> A. Problem with MimeMessageInputStreamSource.java. current finalize
may
> not
> fix memory issues if the system is under a lot of stress.
> Would this be a better fix given that data is already being read in
memory
> ?
> 
> Index: MimeMessageInputStreamSource.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-
> james/src/java/org/apache/james/core/MimeMessageInputStrea
> mSource.java,v
> retrieving revision 1.8
> diff -u -r1.8 MimeMessageInputStreamSource.java
> --- MimeMessageInputStreamSource.java 3 Sep 2002 16:52:16 -0000 1.8
> +++ MimeMessageInputStreamSource.java 19 Oct 2002 21:55:55 -0000
> @@ -24,9 +24,9 @@
>  public class MimeMessageInputStreamSource extends MimeMessageSource {
> 
>      /**
> -     * A temporary file used to hold the message stream
> +     * message stream
>       */
> -    File file = null;
> +    byte[] msgbytes = null;
> 
>      /**
>       * The full path of the temporary file
> @@ -46,32 +46,19 @@
>       */
>      public MimeMessageInputStreamSource(String key, InputStream in)
>              throws MessagingException {
> -        //We want to immediately read this into a temporary file
> -        //Create a temp file and channel the input stream into it
> -        OutputStream fout = null;
>          try {
> -            file = File.createTempFile(key, ".m64");
> -            fout = new BufferedOutputStream(new
FileOutputStream(file));
> +            ByteArrayOutputStream baout = new
ByteArrayOutputStream();
>              int b = -1;
> -            while ((b = in.read()) != -1) {
> -                fout.write(b);
> +            byte[] ba = new byte[1024];
> +            while ((b = in.read(ba)) != -1) {
> +                baout.write(ba,0,b);
>              }
> -            fout.flush();
> -            file.deleteOnExit();
> -
> -            sourceId = file.getCanonicalPath();
> +            msgbytes = baout.toByteArray();
> +            sourceId = key;
>          } catch (IOException ioe) {
>              throw new MessagingException("Unable to retrieve the
data: "
> +
> ioe.getMessage(), ioe);
>          } finally {
>              try {
> -                if (fout != null) {
> -                    fout.close();
> -                }
> -            } catch (IOException ioe) {
> -                // Ignored - logging unavailable to log this
non-fatal
> error.
> -            }
> -
> -            try {
>                  if (in != null) {
>                      in.close();
>                  }
> @@ -96,7 +83,7 @@
>       * @return a <code>BufferedInputStream</code> containing the data
>       */
>      public synchronized InputStream getInputStream() throws
IOException {
> -        return new BufferedInputStream(new FileInputStream(file));
> +        return new ByteArrayInputStream(msgbytes);
>      }
> 
>      /**
> @@ -107,22 +94,6 @@
>       * @throws IOException if an error is encoutered while computing
the
> size of the message
>       */
>      public long getMessageSize() throws IOException {
> -        return file.length();
> -    }
> -
> -    /**
> -     * <p>Finalizer that closes and deletes the temp file.  Very
bad.</p>
> -     * <p>TODO: Should be replaced with a more robust cleanup
> mechanism</p>
> -     *
> -     */
> -    public void finalize() {
> -        try {
> -            if (file != null && file.exists()) {
> -                file.delete();
> -            }
> -        } catch (Exception e) {
> -            //ignore
> -        }
> -        file = null;
> +        return msgbytes.length;
>      }
>  }
> 
> 
> B. Problem with ThreadManager. I think it is best to replace
scratchpad
> thread pool with the one from util concurrent library. Also not can
you
> point out where the thread pool finally changes have been done. Can't
see
> from the diffs and how this is a problem with current system.
> 
> C. Scheduler leak. This can be addressed in different ways. It is
being
> disscussed separately. let us keep the memory leak for thread pool and
> MimeMessageInputStream separate.
> 
> Harmeet
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:james-dev-
> [EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:james-dev-
> [EMAIL PROTECTED]>



--
To unsubscribe, e-mail:   <mailto:james-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:james-dev-help@;jakarta.apache.org>

Reply via email to