posix-threads.cc (_Jv_ThreadInterrupt): Re-enable interrupt of blocking IO via pthrea...
authorBryce McKinlay <bryce@waitaki.otago.ac.nz>
Fri, 21 Sep 2001 04:23:31 +0000 (04:23 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Fri, 21 Sep 2001 04:23:31 +0000 (05:23 +0100)
* 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.

From-SVN: r45719

libjava/ChangeLog
libjava/java/io/natFileDescriptorPosix.cc
libjava/posix-threads.cc

index 31745a9bc08d9a1d3451a3bf972e7d59e176acc7..664a232429192bce0aeb72fbc7611915c6401d54 100644 (file)
@@ -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
index ad1c1cdd0486c9d099a94291426e5ea8329d006b..7c55f562d66f8c4d7fce9b16a6819180381fcda7 100644 (file)
@@ -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;
 }
 
index 21f61370df243ec1d034f991ec648d46693c47e2..10cfcbae9b30febfbab280e195863a2d34489f12 100644 (file)
@@ -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);