From 993c7d174871d15da9eace2f8651879687392af2 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Mon, 4 Dec 2006 20:13:12 +0000 Subject: 2006-12-04 Roman Kennke * native/jni/java-nio/gnu_java_nio_VMChannel.c (Java_gnu_java_nio_VMChannel_connect): Retry on EINTR. --- ChangeLog | 5 +++++ native/jni/java-nio/gnu_java_nio_VMChannel.c | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f5af97a42..7dfd8f195 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-12-04 Roman Kennke + + * native/jni/java-nio/gnu_java_nio_VMChannel.c + (Java_gnu_java_nio_VMChannel_connect): Retry on EINTR. + 2006-12-04 Roman Kennke * java/awt/font/TextLayout.java 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); -- cgit v1.2.1