JNI函数中的内存泄漏Java_java_io_WinNTFileSystem_rename0?

时间:2013-04-07 09:05:48

标签: java java-native-interface

我认为http://download.java.net/openjdk/jdk6/promoted/b27/openjdk-6-src-b27-26_oct_2012.tar.gz中jdk / src / windows / native / java / io / WinNTFileSystem_md.c文件中的以下函数忽略了释放frompathtopath使用的内存如果发现其中一个是NULL ...

JNIEXPORT jboolean JNICALL
Java_java_io_WinNTFileSystem_rename0(JNIEnv *env, jobject this, jobject from,
                                 jobject to)
{

    jboolean rv = JNI_FALSE;
    WCHAR *frompath = fileToNTPath(env, from, ids.path);
    WCHAR *topath = fileToNTPath(env, to, ids.path);
    if (frompath == NULL || topath == NULL)
        return JNI_FALSE;
    if (_wrename(frompath, topath) == 0) {
        rv = JNI_TRUE;
    }
    free(frompath);
    free(topath);
    return rv;
}

我错过了什么吗?这实际上是一个错误吗?

已解决:进一步了解io_util_md.c中功能pathToNTPath的详细信息,我发现fileToNTPath只会返回NULL内存不足错误的情况,所以我想我们不关心我们是否忽略了在JVM即将崩溃时释放我们malloc的东西!在我看来,这仍然应记录在Java_java_io_WinNTFileSystem_rename0函数中。

3 个答案:

答案 0 :(得分:1)

我认为原点是有效的。虽然对此代码使用的其他函数的研究确实表明问题可能不那么重要,但是当查看本身时,这个代码是缺乏的。

代码审查的一般规则是,如果某人有问题,通常应该在代码中回答至少一个评论。

注释的一般规则是,如果它可以用代码表示,它可能应该是。

如果编写代码以消除问题,所有这些问题都会消失。

答案 1 :(得分:0)

从我pathToNTPath()所看到的,fileToNTPath()调用它,它只在OutOfMemoryException的情况下返回NULL,所以我想可以安全地假设一个人不需要要小心释放几个字节的路径名。

答案 2 :(得分:0)

已解决:进一步了解io_util_md.c中功能pathToNTPath的详细信息,我发现fileToNTPath只会返回NULL内存不足错误的情况,所以我想我们不关心我们是否忽略了在JVM即将崩溃时释放我们malloc的东西!在我看来,这仍然应记录在Java_java_io_WinNTFileSystem_rename0函数中。