I think we agreed on this one a few weeks ago but it was never applied.  Is
there still a problem?

george

-----Original Message-----
From: George T. Joseph [mailto:[EMAIL PROTECTED]
Sent: Monday, February 07, 2000 11:01 PM
To: [EMAIL PROTECTED]
Subject: RE: Patch for ChunkyByteArray.java


OK, the new patch is below.  I left "fInputStream=null" in close().  There are a
few places in ChunkyByteArray where fInputStream is tested for null as an
indication of whether the stream has been closed. I think they're perfectly
valid since much of java.io does exactly the same thing.

george

*** xml-xerces/java/src/org/apache/xerces/utils/ChunkyByteArray.java    Tue Jan 
25
19:26:44 2000
--- src/org/apache/xerces/utils/ChunkyByteArray.java    Mon Feb 07 22:13:52 2000
***************
*** 109,116 ****
          int b = (int)(fData[0][fOffset]);
          if (++fOffset == fLength) {
              fData = null;
-             if (fLength < CHUNK_SIZE)
-                 fInputStream = null;
          }
          return b;
      }
--- 109,114 ----
***************
*** 134,141 ****
          byte[] chunk = fData[0];
          if (length >= bytesLeft) {
              length = bytesLeft;
-             if (fLength < CHUNK_SIZE)
-                 fInputStream = null;
          }
          if (buffer == null) {
              fOffset += length;
--- 132,137 ----
***************
*** 209,216 ****
              result = fInputStream.read(data, offset, capacity);
              if (result == -1) {
                  data[offset] = (byte)0xff;
-                 fInputStream.close();
-                 fInputStream = null;
                  break;
              }
              if (result > 0) {
--- 205,210 ----
***************
*** 220,225 ****
--- 214,225 ----
              }
          } while (capacity > 0);
      }
+        public void close() throws IOException
+        {
+               if (fInputStream == null) return;
+               fInputStream.close();
+               fInputStream=null;
+       }
      //
      // Chunk size constants
      //

-----Original Message-----
From: Andy Clark [mailto:[EMAIL PROTECTED]
Sent: Monday, February 07, 2000 7:50 PM
To: [EMAIL PROTECTED]
Subject: Re: Patch for ChunkyByteArray.java


"George T. Joseph" wrote:
> ChunkyByteArray didn't have a close() method so if
> ChunkyByteArray.close() were called (and it IS being
> called properly), it would be InputStream.close() that
> was actually invoked.  That's an empty method and
> therefore a leak.

You are absolutely correct. This needs to be fixed.

> So, I'll remove the calls to close() in ChunkyByteArray,
> but the close() method itself needs to stay.  Also, the
> existing "fInputStream = null" statements have
> to stay removed so close() can call fInputStream.close().

Exactly. In fact, the fInputStream field should never be
set to null. But we need to make sure that there is no
code that relies on the fact that the field is null in
order to operate correctly. We may be fine just removing
the assignments to null, though.

--
Andy Clark * IBM, JTC - Silicon Valley * [EMAIL PROTECTED]

Reply via email to