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 | |
parent | e3c541f009be650d66aef14d6df32dae184e0f08 (diff) | |
download | gcc-589438074591f19ca383985552d6b75cb33c5588.tar.gz |
* 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')
-rw-r--r-- | libjava/ChangeLog | 10 | ||||
-rw-r--r-- | libjava/java/io/natFileDescriptorPosix.cc | 73 | ||||
-rw-r--r-- | libjava/posix-threads.cc | 2 |
3 files changed, 51 insertions, 34 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 31745a9bc08..664a2324291 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2001-09-20 Bryce McKinlay <bryce@waitaki.otago.ac.nz> + + * 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. + 2001-09-19 Anthony Green <green@redhat.com> * gnu/gcj/protocol/file/Handler.java: Avoid NullPointerException 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; } diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index 21f61370df2..10cfcbae9b3 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -263,7 +263,7 @@ _Jv_ThreadInterrupt (_Jv_Thread_t *data) data->thread_obj->interrupt_flag = true; // Interrupt blocking system calls using a signal. -// pthread_kill (data->thread, INTR); + pthread_kill (data->thread, INTR); pthread_cond_signal (&data->wait_cond); |