classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] FYI: Some more FileChannelImpl.c cleanups


From: Mark Wielaard
Subject: [cp-patches] FYI: Some more FileChannelImpl.c cleanups
Date: Tue, 26 Jul 2005 14:34:56 +0200

Hi,

A close and select call (possibly used by available) can be interrupted.
In that case we have to retry the system call.

2005-07-26  Mark Wielaard  <address@hidden>

    * native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
    (Java_gnu_java_nio_channels_FileChannelImpl_init): Mark clazz as
    unused. Remove unused variables constructor and obj.
    (Java_gnu_java_nio_channels_FileChannelImpl_implCloseChannel): Retry
    when interrupted.
    (Java_gnu_java_nio_channels_FileChannelImpl_available): Likewise.

Also cleans up some warnings caused by the move of parts of init from
the native to java side.

Committed,

Mark
Index: native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,v
retrieving revision 1.21
diff -u -r1.21 gnu_java_nio_channels_FileChannelImpl.c
--- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 26 Jul 2005 
09:40:21 -0000      1.21
+++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 26 Jul 2005 
12:30:50 -0000
@@ -113,12 +113,12 @@
  * static initialization.
  */
 JNIEXPORT void JNICALL
-Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv * env, jclass clazz)
+Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv * env,
+                                               jclass clazz
+                                               __attribute__ ((__unused__)))
 {
   jclass clazz_fc;
   jfieldID field;
-  jmethodID constructor;
-  jobject obj;
 
   /* Initialize native_fd_fieldID so we only compute it once! */
   clazz_fc = (*env)->FindClass (env, "gnu/java/nio/channels/FileChannelImpl");
@@ -236,12 +236,19 @@
 
   native_fd = get_native_fd (env, obj);
 
-  TARGET_NATIVE_FILE_CLOSE (native_fd, result);
-  if (result != TARGET_NATIVE_OK)
+  do
     {
-      JCL_ThrowException (env, IO_EXCEPTION,
-                         TARGET_NATIVE_LAST_ERROR_STRING ());
+      TARGET_NATIVE_FILE_CLOSE (native_fd, result);
+      if (result != TARGET_NATIVE_OK
+         && (TARGET_NATIVE_LAST_ERROR ()
+             != TARGET_NATIVE_ERROR_INTERRUPT_FUNCTION_CALL))
+       {
+         JCL_ThrowException (env, IO_EXCEPTION,
+                             TARGET_NATIVE_LAST_ERROR_STRING ());
+         return;
+       }
     }
+  while (result != TARGET_NATIVE_OK);
 }
 
 /*
@@ -258,13 +265,19 @@
 
   native_fd = get_native_fd (env, obj);
 
-  TARGET_NATIVE_FILE_AVAILABLE (native_fd, bytes_available, result);
-  if (result != TARGET_NATIVE_OK)
+  do
     {
-      JCL_ThrowException (env, IO_EXCEPTION,
-                         TARGET_NATIVE_LAST_ERROR_STRING ());
-      return 0;
+      TARGET_NATIVE_FILE_AVAILABLE (native_fd, bytes_available, result);
+      if (result != TARGET_NATIVE_OK
+         && (TARGET_NATIVE_LAST_ERROR ()
+             != TARGET_NATIVE_ERROR_INTERRUPT_FUNCTION_CALL))
+       {
+         JCL_ThrowException (env, IO_EXCEPTION,
+                             TARGET_NATIVE_LAST_ERROR_STRING ());
+         return 0;
+       }
     }
+  while (result != TARGET_NATIVE_OK);
 
   /* FIXME NYI ??? why only jint and not jlong? */
   return TARGET_NATIVE_MATH_INT_INT64_TO_INT32 (bytes_available);

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]