summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Kennke <roman@kennke.org>2006-12-04 20:13:12 +0000
committerRoman Kennke <roman@kennke.org>2006-12-04 20:13:12 +0000
commit993c7d174871d15da9eace2f8651879687392af2 (patch)
treeb1d0471e44f724f06f7a437c57f4023cc0dac43c
parent22bd14a3a7ecf5c8a11ffb7ff57d4eef4c1f2cc1 (diff)
downloadclasspath-993c7d174871d15da9eace2f8651879687392af2.tar.gz
2006-12-04 Roman Kennke <kennke@aicas.com>
* native/jni/java-nio/gnu_java_nio_VMChannel.c (Java_gnu_java_nio_VMChannel_connect): Retry on EINTR.
-rw-r--r--ChangeLog5
-rw-r--r--native/jni/java-nio/gnu_java_nio_VMChannel.c11
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index f5af97a42..7dfd8f195 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2006-12-04 Roman Kennke <kennke@aicas.com>
+ * native/jni/java-nio/gnu_java_nio_VMChannel.c
+ (Java_gnu_java_nio_VMChannel_connect): Retry on EINTR.
+
+2006-12-04 Roman Kennke <kennke@aicas.com>
+
* java/awt/font/TextLayout.java
(hitTestChar): Fixed conditions for inclusion of range.
Use layout information in the run for more efficiency.
diff --git a/native/jni/java-nio/gnu_java_nio_VMChannel.c b/native/jni/java-nio/gnu_java_nio_VMChannel.c
index a8df3ad33..8d8aefe5d 100644
--- a/native/jni/java-nio/gnu_java_nio_VMChannel.c
+++ b/native/jni/java-nio/gnu_java_nio_VMChannel.c
@@ -1036,6 +1036,7 @@ Java_gnu_java_nio_VMChannel_connect (JNIEnv *env, jclass clazz __attribute__((un
int origflags = 0, flags;
jbyte *addr_elems;
int ret;
+ int tmpErrno;
if ((*env)->GetArrayLength (env, addr) != 4)
{
@@ -1074,8 +1075,14 @@ Java_gnu_java_nio_VMChannel_connect (JNIEnv *env, jclass clazz __attribute__((un
sockaddr.sin_addr.s_addr = *((uint32_t *) addr_elems);
- ret = cpnio_connect (fd, (struct sockaddr *) &sockaddr,
- sizeof (struct sockaddr_in));
+ do
+ {
+ ret = cpnio_connect (fd, (struct sockaddr *) &sockaddr,
+ sizeof (struct sockaddr_in));
+ tmpErrno = errno;
+ }
+ while (ret == -1 && errno == EINTR && ! JCL_thread_interrupted(env));
+ errno = tmpErrno;
(*env)->ReleaseByteArrayElements (env, addr, addr_elems, JNI_ABORT);