Return-Path: Delivered-To: apmail-hadoop-mapreduce-commits-archive@minotaur.apache.org Received: (qmail 84320 invoked from network); 21 Jan 2010 00:24:03 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 21 Jan 2010 00:24:03 -0000 Received: (qmail 5851 invoked by uid 500); 21 Jan 2010 00:24:03 -0000 Delivered-To: apmail-hadoop-mapreduce-commits-archive@hadoop.apache.org Received: (qmail 5791 invoked by uid 500); 21 Jan 2010 00:24:03 -0000 Mailing-List: contact mapreduce-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mapreduce-dev@hadoop.apache.org Delivered-To: mailing list mapreduce-commits@hadoop.apache.org Received: (qmail 5781 invoked by uid 99); 21 Jan 2010 00:24:03 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jan 2010 00:24:03 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jan 2010 00:24:00 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5BD2223889C5; Thu, 21 Jan 2010 00:23:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r901460 - in /hadoop/mapreduce/branches/branch-0.21: CHANGES.txt src/c++/libhdfs/hdfs.c src/c++/libhdfs/hdfsJniHelper.c Date: Thu, 21 Jan 2010 00:23:39 -0000 To: mapreduce-commits@hadoop.apache.org From: szetszwo@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100121002339.5BD2223889C5@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: szetszwo Date: Thu Jan 21 00:23:38 2010 New Revision: 901460 URL: http://svn.apache.org/viewvc?rev=901460&view=rev Log: HDFS-464. Fix memory leaks in libhdfs. Contributed by Christian Kunz Modified: hadoop/mapreduce/branches/branch-0.21/CHANGES.txt hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfs.c hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfsJniHelper.c Modified: hadoop/mapreduce/branches/branch-0.21/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/branch-0.21/CHANGES.txt?rev=901460&r1=901459&r2=901460&view=diff ============================================================================== --- hadoop/mapreduce/branches/branch-0.21/CHANGES.txt (original) +++ hadoop/mapreduce/branches/branch-0.21/CHANGES.txt Thu Jan 21 00:23:38 2010 @@ -921,3 +921,4 @@ MAPREDUCE-1359. TypedBytes TestIO doesn't mkdir its test dir first. (Anatoli Fomenko via cos) + HDFS-464. Fix memory leaks in libhdfs. (Christian Kunz via szetszwo) Modified: hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfs.c URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/branch-0.21/src/c%2B%2B/libhdfs/hdfs.c?rev=901460&r1=901459&r2=901460&view=diff ============================================================================== --- hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfs.c (original) +++ hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfs.c Thu Jan 21 00:23:38 2010 @@ -219,6 +219,7 @@ if (groups == NULL || groups_size <= 0) { fprintf(stderr, "ERROR: groups must not be empty/null\n"); errno = EINVAL; + destroyLocalReference(env, jConfiguration); return NULL; } @@ -227,6 +228,8 @@ if (jGroups == NULL) { errno = EINTERNAL; fprintf(stderr, "ERROR: could not construct groups array\n"); + destroyLocalReference(env, jConfiguration); + destroyLocalReference(env, jUserString); return NULL; } @@ -259,12 +262,14 @@ destroyLocalReference(env, jGroups); } destroyLocalReference(env, jUgi); + destroyLocalReference(env, jAttrString); return NULL; } destroyLocalReference(env, jUserString); destroyLocalReference(env, jGroups); destroyLocalReference(env, jUgi); + destroyLocalReference(env, jAttrString); } #else @@ -402,6 +407,7 @@ if (groups == NULL || groups_size <= 0) { fprintf(stderr, "ERROR: groups must not be empty/null\n"); errno = EINVAL; + destroyLocalReference(env, jConfiguration); return NULL; } @@ -410,6 +416,8 @@ if (jGroups == NULL) { errno = EINTERNAL; fprintf(stderr, "ERROR: could not construct groups array\n"); + destroyLocalReference(env, jConfiguration); + destroyLocalReference(env, jUserString); return NULL; } @@ -442,12 +450,14 @@ destroyLocalReference(env, jGroups); } destroyLocalReference(env, jUgi); + destroyLocalReference(env, jAttrString); return NULL; } destroyLocalReference(env, jUserString); destroyLocalReference(env, jGroups); destroyLocalReference(env, jUgi); + destroyLocalReference(env, jAttrString); } #else @@ -726,12 +736,12 @@ file = malloc(sizeof(struct hdfsFile_internal)); if (!file) { errno = ENOMEM; - return NULL; - } - file->file = (*env)->NewGlobalRef(env, jVal.l); - file->type = (((flags & O_WRONLY) == 0) ? INPUT : OUTPUT); + } else { + file->file = (*env)->NewGlobalRef(env, jVal.l); + file->type = (((flags & O_WRONLY) == 0) ? INPUT : OUTPUT); - destroyLocalReference(env, jVal.l); + destroyLocalReference(env, jVal.l); + } done: @@ -813,9 +823,11 @@ jPath) != 0) { errno = errnoFromException(jExc, env, "org.apache.hadoop.fs." "FileSystem::exists"); + destroyLocalReference(env, jPath); return -1; } + destroyLocalReference(env, jPath); return jVal.z ? 0 : -1; } @@ -1332,6 +1344,7 @@ jPath, jRecursive) != 0) { errno = errnoFromException(jExc, env, "org.apache.hadoop.fs." "FileSystem::delete"); + destroyLocalReference(env, jPath); return -1; } @@ -1382,6 +1395,8 @@ jOldPath, jNewPath) != 0) { errno = errnoFromException(jExc, env, "org.apache.hadoop.fs." "FileSystem::rename"); + destroyLocalReference(env, jOldPath); + destroyLocalReference(env, jNewPath); return -1; } @@ -1645,6 +1660,7 @@ //Create an object of org.apache.hadoop.fs.Path jobject jPath = constructNewObjectOfPath(env, path); if (jPath == NULL) { + destroyLocalReference(env, jPermObj); return -3; } @@ -1916,8 +1932,10 @@ "getCapacity", "()J") != 0) { errno = errnoFromException(jExc, env, "org.apache.hadoop.fs." "FsStatus::getCapacity"); + destroyLocalReference(env, fss); return -1; } + destroyLocalReference(env, fss); return jVal.j; } @@ -1952,8 +1970,10 @@ "getUsed", "()J") != 0) { errno = errnoFromException(jExc, env, "org.apache.hadoop.fs." "FsStatus::getUsed"); + destroyLocalReference(env, fss); return -1; } + destroyLocalReference(env, fss); return jVal.j; } Modified: hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfsJniHelper.c URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/branch-0.21/src/c%2B%2B/libhdfs/hdfsJniHelper.c?rev=901460&r1=901459&r2=901460&view=diff ============================================================================== --- hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfsJniHelper.c (original) +++ hadoop/mapreduce/branches/branch-0.21/src/c++/libhdfs/hdfsJniHelper.c Thu Jan 21 00:23:38 2010 @@ -243,6 +243,7 @@ fprintf(stderr, "ERROR: jelem == NULL\n"); } (*env)->SetObjectArrayElement(env, result, i, jelem); + (*env)->DeleteLocalRef(env, jelem); } return result; }