mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-19 03:53:58 +08:00
posix-threads.cc (_Jv_ThreadInterrupt): Re-enable interrupt of blocking IO via pthread_kill().
* 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
This commit is contained in:
parent
91d231cb91
commit
f449e8853b
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user