Skip to content
Snippets Groups Projects
Commit ffde4de0 authored by tromey's avatar tromey
Browse files

* java/io/natFileDescriptorPosix.cc (write): Try again on EINTR.

	(write): Likewise.
	(read): Likewise.
	(read): Likewise.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69807 138bc75d-0d04-0410-961f-82ee72b054a4
parent b24e4c6b
No related branches found
No related tags found
No related merge requests found
2003-07-25 Tom Tromey <tromey@redhat.com>
* java/io/natFileDescriptorPosix.cc (write): Try again on EINTR.
(write): Likewise.
(read): Likewise.
(read): Likewise.
2003-07-25 Mark Wielaard <mark@klomp.org> 2003-07-25 Mark Wielaard <mark@klomp.org>
* java/lang/natRuntime.cc (_load): Add library name to * java/lang/natRuntime.cc (_load): Add library name to
......
...@@ -150,7 +150,8 @@ java::io::FileDescriptor::write (jint b) ...@@ -150,7 +150,8 @@ java::io::FileDescriptor::write (jint b)
iioe->bytesTransferred = r == -1 ? 0 : r; iioe->bytesTransferred = r == -1 ? 0 : r;
throw iioe; throw iioe;
} }
throw new IOException (JvNewStringLatin1 (strerror (errno))); if (errno != EINTR)
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
} }
position++; position++;
...@@ -178,7 +179,8 @@ java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len) ...@@ -178,7 +179,8 @@ java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len)
iioe->bytesTransferred = written; iioe->bytesTransferred = written;
throw iioe; throw iioe;
} }
throw new IOException (JvNewStringLatin1 (strerror (errno))); if (errno != EINTR)
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
written += r; written += r;
...@@ -282,20 +284,26 @@ jint ...@@ -282,20 +284,26 @@ jint
java::io::FileDescriptor::read (void) java::io::FileDescriptor::read (void)
{ {
jbyte b; jbyte b;
int r = ::read (fd, &b, 1); int r;
if (r == 0) do
return -1;
if (r == -1)
{ {
if (java::lang::Thread::interrupted()) r = ::read (fd, &b, 1);
if (r == 0)
return -1;
if (r == -1)
{ {
InterruptedIOException *iioe if (java::lang::Thread::interrupted())
= new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); {
iioe->bytesTransferred = r == -1 ? 0 : r; InterruptedIOException *iioe
throw iioe; = new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
iioe->bytesTransferred = r == -1 ? 0 : r;
throw iioe;
}
if (errno != EINTR)
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
while (r != 1);
position++; position++;
return b & 0xFF; return b & 0xFF;
} }
...@@ -314,20 +322,26 @@ java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count) ...@@ -314,20 +322,26 @@ java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count)
return 0; return 0;
jbyte *bytes = elements (buffer) + offset; jbyte *bytes = elements (buffer) + offset;
int r = ::read (fd, bytes, count); int r;
if (r == 0) do
return -1; {
if (r == -1) r = ::read (fd, bytes, count);
{ if (r == 0)
if (java::lang::Thread::interrupted()) return -1;
if (r == -1)
{ {
InterruptedIOException *iioe if (java::lang::Thread::interrupted())
= new InterruptedIOException (JvNewStringLatin1 (strerror (errno))); {
iioe->bytesTransferred = r == -1 ? 0 : r; InterruptedIOException *iioe
throw iioe; = new InterruptedIOException (JvNewStringLatin1 (strerror (errno)));
iioe->bytesTransferred = r == -1 ? 0 : r;
throw iioe;
}
if (errno != EINTR)
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
throw new IOException (JvNewStringLatin1 (strerror (errno)));
} }
while (r <= 0);
position += r; position += r;
return r; return r;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment