diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | native/jni/java-nio/gnu_java_nio_VMChannel.c | 11 |
2 files changed, 14 insertions, 2 deletions
@@ -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); |