classpath-patches
[Top][All Lists]
Advanced

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

[cp-patches] FYI: Match JCL_jstring_to_cstring with JCL_free_cstring


From: Mark Wielaard
Subject: [cp-patches] FYI: Match JCL_jstring_to_cstring with JCL_free_cstring
Date: Sun, 09 Jan 2005 20:31:24 +0100

Hi,

We were leaking memory in some native JNI methods because the strings
returned from JCL_jstring_to_cstring() were never reclaimed by
JCL_free_cstring(). (Don't you love C memory management.)

2005-01-09  Mark Wielaard  <address@hidden>

        * native/jni/java-io/java_io_VMFile.c
        (Java_java_io_VMFile_create): Call JCL_free_cstring() when done with
        string.
        * native/jni/java-io/javaio.c
        (_javaio_open_read): Likewise.
        (_javaio_open_readwrite): Likewise.
        * native/jni/java-lang/java_lang_VMSystem.c
        (Java_java_lang_VMSystem_getenv): Likewise.
        * native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
        (Java_gnu_java_nio_channels_FileChannelImpl_open): Likewise.

These were found by running valgrind (http://valgrind.kde.org/) on a
program that was opening lots of files.

Committed,

Mark
Index: native/jni/java-io/java_io_VMFile.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/java-io/java_io_VMFile.c,v
retrieving revision 1.2
diff -u -r1.2 java_io_VMFile.c
--- native/jni/java-io/java_io_VMFile.c 26 Oct 2004 20:26:03 -0000      1.2
+++ native/jni/java-io/java_io_VMFile.c 9 Jan 2005 19:27:23 -0000
@@ -88,10 +88,12 @@
         JCL_ThrowException(env,
                            "java/io/IOException",
                            TARGET_NATIVE_LAST_ERROR_STRING());
+      JCL_free_cstring(env, name, filename);
       return(0);
     }
   TARGET_NATIVE_FILE_CLOSE(fd,result);
 
+  JCL_free_cstring(env, name, filename);
   return(1);
 #else /* not WITHOUT_FILESYSTEM */
   return(0);
Index: native/jni/java-io/javaio.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/java-io/javaio.c,v
retrieving revision 1.13
diff -u -r1.13 javaio.c
--- native/jni/java-io/javaio.c 26 Oct 2004 20:26:03 -0000      1.13
+++ native/jni/java-io/javaio.c 9 Jan 2005 19:27:23 -0000
@@ -82,6 +82,7 @@
                            TARGET_NATIVE_LAST_ERROR_STRING());
     }
 
+  JCL_free_cstring(env, name, filename); 
   return(fd);
 #else /* not WITHOUT_FILESYSTEM */
   return(-1);
@@ -118,6 +119,7 @@
                            TARGET_NATIVE_LAST_ERROR_STRING());
     }
 
+  JCL_free_cstring(env, name, filename); 
   return(fd);
 #else /* not WITHOUT_FILESYSTEM */
   return(-1);
Index: native/jni/java-lang/java_lang_VMSystem.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/java-lang/java_lang_VMSystem.c,v
retrieving revision 1.9
diff -u -r1.9 java_lang_VMSystem.c
--- native/jni/java-lang/java_lang_VMSystem.c   6 Dec 2004 20:43:13 -0000       
1.9
+++ native/jni/java-lang/java_lang_VMSystem.c   9 Jan 2005 19:27:23 -0000
@@ -154,5 +154,6 @@
   if (envname == NULL)
     return NULL;
 
+  JCL_free_cstring(env, jname, cname);
   return (*env)->NewStringUTF(env, envname);
 }
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.13
diff -u -r1.13 gnu_java_nio_channels_FileChannelImpl.c
--- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 26 Oct 2004 
20:26:03 -0000      1.13
+++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 9 Jan 2005 
19:27:23 -0000
@@ -209,7 +209,7 @@
 #endif
 
   TARGET_NATIVE_FILE_OPEN(filename,native_fd,flags,permissions,result);
-  (*env)->ReleaseStringUTFChars(env, name, filename);
+  JCL_free_cstring(env, name, filename);
 
   if (result != TARGET_NATIVE_OK)
     {

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


reply via email to

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