Name: nt126004 Date: 09/27/2002
FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
ADDITIONAL OPERATING SYSTEMS :
A DESCRIPTION OF THE PROBLEM :
JDK 1.4 introduced the following check in PipedReader:
(in void receive(int c))
else if (readSide != null && !readSide.isAlive()) {
throw new IOException("Read end dead");
The problem with this new code snipplet is that it makes
it impossible for multiple threads to share the same
PipedReader. For example, if one thread passes off the
PipedReader to another and shuts down, when the next thread
tries to make use of the pipe this exception will be thrown.
I have one thread reading from the pipe while another
waits for the data for a TIMEOUT period of time. It's a
basic producer/consumer model. The problem is that multiple
producers share the same PipedReader (I spawn a new one per
read request) and the aforementioned exception is thrown.
I understand that in my specific case I should
implement a more efficient use of Threads and try to make
use of a single thread for all producer operations, but
that is besides the point.
I am wondering, why was this check added? Can we still
achieve the same functionality without this unwanted
limitation? If not, please document this limitation in the
Javadoc.
I argue that "readSide" should be removed altogether and that users should be allowed to write into one end of the pipe even if there is no owner-thread over the other end. Reasoning: Users should be able to share
PipedReader/PipedWriter across multiple threads; this is not possible in the current approach. If the old owner dies and the Piped* is
passed on to another thread, an exception may *still* be generated complaining
that the old thread is dead.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. See description
2.
3.
REPRODUCIBILITY :
This bug can be reproduced always.
(Review ID: 164393)
======================================================================
FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
ADDITIONAL OPERATING SYSTEMS :
A DESCRIPTION OF THE PROBLEM :
JDK 1.4 introduced the following check in PipedReader:
(in void receive(int c))
else if (readSide != null && !readSide.isAlive()) {
throw new IOException("Read end dead");
The problem with this new code snipplet is that it makes
it impossible for multiple threads to share the same
PipedReader. For example, if one thread passes off the
PipedReader to another and shuts down, when the next thread
tries to make use of the pipe this exception will be thrown.
I have one thread reading from the pipe while another
waits for the data for a TIMEOUT period of time. It's a
basic producer/consumer model. The problem is that multiple
producers share the same PipedReader (I spawn a new one per
read request) and the aforementioned exception is thrown.
I understand that in my specific case I should
implement a more efficient use of Threads and try to make
use of a single thread for all producer operations, but
that is besides the point.
I am wondering, why was this check added? Can we still
achieve the same functionality without this unwanted
limitation? If not, please document this limitation in the
Javadoc.
I argue that "readSide" should be removed altogether and that users should be allowed to write into one end of the pipe even if there is no owner-thread over the other end. Reasoning: Users should be able to share
PipedReader/PipedWriter across multiple threads; this is not possible in the current approach. If the old owner dies and the Piped* is
passed on to another thread, an exception may *still* be generated complaining
that the old thread is dead.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. See description
2.
3.
REPRODUCIBILITY :
This bug can be reproduced always.
(Review ID: 164393)
======================================================================