java.io.PipedReader
YAMAGUCHI Yuji
kaffe@rufus.w3.org
Tue, 29 Jun 1999 03:37:56 +0900
--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==
Content-Transfer-Encoding: 7bit
Content-Type: text/plain
Hi, all.
Here is a patch for PipedReader.
Attached is the test program.
Index: PipedReader.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/io/PipedReader.java,v
retrieving revision 1.1
diff -c -r1.1 PipedReader.java
*** PipedReader.java 1998/07/14 17:02:05 1.1
--- PipedReader.java 1999/06/28 19:07:57
***************
*** 45,68 ****
synchronized(lock) {
! while (size == 0) {
! if (wr == null) {
! return (-1);
}
! try {
! lock.wait();
! }
! catch (InterruptedException _) {
! }
}
- for (i = 0; i < len && size > 0; i++) {
- cbuf[off++] = buf[outpos++];
- size--;
- if (outpos == buf.length) {
- outpos = 0;
- }
- }
}
return (i);
}
--- 45,71 ----
synchronized(lock) {
! for (i = 0; i < len;) {
! while (size == 0) {
! if (wr == null) {
! return i > 0 ? i : -1;
! }
! try {
! lock.wait();
! }
! catch (InterruptedException _) {
! }
}
! for (; i < len && size > 0; i++) {
! cbuf[off++] = buf[outpos++];
! size--;
! if (outpos == buf.length) {
! outpos = 0;
! }
! }
! lock.notifyAll();
}
}
return (i);
}
***************
*** 71,77 ****
{
synchronized(lock) {
! for (int i = 0; i < len; i++) {
for (;;) {
if (size < buf.length) {
break;
--- 74,80 ----
{
synchronized(lock) {
! for (int i = 0; i < len;) {
for (;;) {
if (size < buf.length) {
break;
***************
*** 81,92 ****
}
catch (InterruptedException _) {
}
- }
- buf[inpos++] = cbuf[off++];
- size++;
- if (inpos == buf.length) {
- inpos = 0;
}
}
}
--- 84,98 ----
}
catch (InterruptedException _) {
}
}
+ for (; i < len && size < buf.length; i++) {
+ buf[inpos++] = cbuf[off++];
+ size++;
+ if (inpos == buf.length) {
+ inpos = 0;
+ }
+ }
+ lock.notifyAll();
}
}
***************
*** 99,104 ****
--- 105,111 ----
wr.rd = null;
wr = null;
}
+ lock.notifyAll();
}
}
--
// YAMAGUCHI Yuji - yamag@distribution.co.jp -
// Freeware Distribution Services Co.,Ltd.
--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==
Content-Type: application/octet-stream; name="PipeTest.java"
Content-Disposition: attachment;
filename="PipeTest.java"
Content-Transfer-Encoding: base64
aW1wb3J0IGphdmEuaW8uKjsNCg0KcHVibGljIGNsYXNzIFBpcGVUZXN0IGV4dGVuZHMgVGhyZWFk
DQp7DQogICAgcHJpdmF0ZSBJbnB1dFN0cmVhbVJlYWRlciByZWFkZXI7DQogICAgcHJpdmF0ZSBQ
aXBlZFdyaXRlciB3cml0ZXI7DQoNCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdb
XSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uDQogICAgew0KCVBpcGVkV3JpdGVyIHdyaXRlciA9IG5l
dyBQaXBlZFdyaXRlcigpOw0KCVBpcGVkUmVhZGVyIHJlYWRlciA9IG5ldyBQaXBlZFJlYWRlcih3
cml0ZXIpOw0KCUZpbGVSZWFkZXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGFyZ3NbMF0p
Ow0KCW5ldyBQaXBlVGVzdChmaWxlUmVhZGVyLCB3cml0ZXIpLnN0YXJ0KCk7DQoNCglCdWZmZXJl
ZFJlYWRlciBidWZmZXJlZFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOw0KCVN0
cmluZyBsaW5lOw0KCXdoaWxlICgobGluZSA9IGJ1ZmZlcmVkUmVhZGVyLnJlYWRMaW5lKCkpICE9
IG51bGwpIHsNCgkgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOw0KCX0NCiAgICB9DQoNCiAg
ICBwdWJsaWMgUGlwZVRlc3QoSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyLCBQaXBlZFdyaXRlciB3
cml0ZXIpDQogICAgew0KCXRoaXMud3JpdGVyID0gd3JpdGVyOw0KCXRoaXMucmVhZGVyID0gcmVh
ZGVyOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIHJ1bigpDQogICAgew0KCXRyeSB7DQoJICAg
IEJ1ZmZlcmVkUmVhZGVyIGJ1ZmZlcmVkUmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKHJlYWRl
cik7DQoJICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHdyaXRl
cik7DQoJICAgIFN0cmluZyBsaW5lOw0KCSAgICB3aGlsZSAoKGxpbmUgPSBidWZmZXJlZFJlYWRl
ci5yZWFkTGluZSgpKSAhPSBudWxsKSB7DQoJCS8vcHJpbnRXcml0ZXIucHJpbnRsbihsaW5lKTsN
CgkJcHJpbnRXcml0ZXIucHJpbnRsbihsaW5lLnRvVXBwZXJDYXNlKCkpOw0KCSAgICB9DQoJICAg
IGJ1ZmZlcmVkUmVhZGVyLmNsb3NlKCk7DQoJICAgIHdyaXRlci5jbG9zZSgpOw0KCX0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsNCgkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCgl9DQogICAgfQ0K
fQ0K
--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==--