diff options
| author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-21 04:23:31 +0000 |
|---|---|---|
| committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-09-21 04:23:31 +0000 |
| commit | 589438074591f19ca383985552d6b75cb33c5588 (patch) | |
| tree | c5d3ce7782681a64bb2752b4c6a1a0f42e3b24f5 /libjava/java/io | |
| parent | e3c541f009be650d66aef14d6df32dae184e0f08 (diff) | |
| download | ppe42-gcc-589438074591f19ca383985552d6b75cb33c5588.tar.gz ppe42-gcc-589438074591f19ca383985552d6b75cb33c5588.zip | |
* posix-threads.cc (_Jv_ThreadInterrupt): Re-enable interrupt of
blocking IO via pthread_kill().
* java/io/natFileDescriptorPosix.cc (write (jint)): Check for thread
interrupted status flag only if ::write returned an error.
(write (jbyteArray, jint, jint): Likewise.
(read (jint)): Likewise.
(read (jbyteArray, jint, jint): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45719 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/io')
| -rw-r--r-- | libjava/java/io/natFileDescriptorPosix.cc | 73 |
1 files changed, 40 insertions, 33 deletions
diff --git a/libjava/java/io/natFileDescriptorPosix.cc b/libjava/java/io/natFileDescriptorPosix.cc index ad1c1cdd048..7c55f562d66 100644 --- a/libjava/java/io/natFileDescriptorPosix.cc +++ b/libjava/java/io/natFileDescriptorPosix.cc @@ -125,15 +125,17 @@ java::io::FileDescriptor::write (jint b) while (r != 1) { r = ::write (fd, &d, 1); - if (java::lang::Thread::interrupted()) - { - InterruptedIOException *iioe - = new InterruptedIOException (JvNewStringLatin1 ("write interrupted")); - iioe->bytesTransferred = r == -1 ? 0 : r; - throw iioe; + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + InterruptedIOException *iioe + = new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + throw new IOException (JvNewStringLatin1 (strerror (errno))); } - else if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); } } @@ -150,18 +152,19 @@ java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len) while (len > 0) { int r = ::write (fd, bytes, len); - if (r != -1) - written += r; - if (java::lang::Thread::interrupted()) - { - InterruptedIOException *iioe - = new InterruptedIOException (JvNewStringLatin1 ("write interrupted")); - iioe->bytesTransferred = written; - throw iioe; + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + InterruptedIOException *iioe + = new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = written; + throw iioe; + } + throw new IOException (JvNewStringLatin1 (strerror (errno))); } - else if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); + written += r; len -= r; bytes += r; } @@ -222,15 +225,17 @@ java::io::FileDescriptor::read (void) int r = ::read (fd, &b, 1); if (r == 0) return -1; - if (java::lang::Thread::interrupted()) + if (r == -1) { - InterruptedIOException *iioe - = new InterruptedIOException (JvNewStringLatin1 ("read interrupted")); - iioe->bytesTransferred = r == -1 ? 0 : r; - throw iioe; + if (java::lang::Thread::interrupted()) + { + InterruptedIOException *iioe + = new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + throw new IOException (JvNewStringLatin1 (strerror (errno))); } - else if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); return b & 0xFF; } @@ -246,15 +251,17 @@ java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count) int r = ::read (fd, bytes, count); if (r == 0) return -1; - if (java::lang::Thread::interrupted()) - { - InterruptedIOException *iioe - = new InterruptedIOException (JvNewStringLatin1 ("read interrupted")); - iioe->bytesTransferred = r == -1 ? 0 : r; - throw iioe; + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + InterruptedIOException *iioe + = new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + throw new IOException (JvNewStringLatin1 (strerror (errno))); } - else if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); return r; } |

