summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-21 04:23:31 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2001-09-21 04:23:31 +0000
commit589438074591f19ca383985552d6b75cb33c5588 (patch)
treec5d3ce7782681a64bb2752b4c6a1a0f42e3b24f5 /libjava
parente3c541f009be650d66aef14d6df32dae184e0f08 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--libjava/java/io/natFileDescriptorPosix.cc73
-rw-r--r--libjava/posix-threads.cc2
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);