[kaffe] CVS kaffe (robilad): fixed ecj memory usage when building classpath

Kaffe CVS cvs-commits at kaffe.org
Fri Feb 15 15:36:24 PST 2008


PatchSet 7755 
Date: 2008/02/15 23:34:42
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
fixed ecj memory usage when building classpath

2008-02-15  Dalibor Topic  <robilad at kaffe.org>

        * libraries/clib/zip/ZipFile.c (java_util_zip_ZipFile_getZipEntry0)
        (java_util_zip_ZipFile_getZipData0)
        (java_util_zip_ZipFile_getZipEntries0),
        kaffe/kaffevm/findInJar.c (findClassInJar)
        (getManifestMainAttribute),
        * kaffe/kaffeh/support.c (kaffeh_findClass): Close opened zip entries
        after use.

        Reported by:  Ito Kazumitsu  <kaz at maczuka.gcd.org>

Members: 
	ChangeLog:1.5255->1.5256 
	kaffe/kaffeh/support.c:1.61->1.62 
	kaffe/kaffevm/findInJar.c:1.80->1.81 
	libraries/clib/zip/ZipFile.c:1.5->1.6 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5255 kaffe/ChangeLog:1.5256
--- kaffe/ChangeLog:1.5255	Fri Feb 15 20:04:05 2008
+++ kaffe/ChangeLog	Fri Feb 15 23:34:42 2008
@@ -1,5 +1,17 @@
 2008-02-15  Dalibor Topic  <robilad at kaffe.org>
 
+	* libraries/clib/zip/ZipFile.c (java_util_zip_ZipFile_getZipEntry0)
+	(java_util_zip_ZipFile_getZipData0)
+	(java_util_zip_ZipFile_getZipEntries0),
+	kaffe/kaffevm/findInJar.c (findClassInJar)
+	(getManifestMainAttribute),
+	* kaffe/kaffeh/support.c (kaffeh_findClass): Close opened zip entries
+	after use.
+
+	Reported by:  Ito Kazumitsu  <kaz at maczuka.gcd.org>
+
+2008-02-15  Dalibor Topic  <robilad at kaffe.org>
+
 	* kaffe/kaffevm/jar.h, kaffe/kaffevm/jar.c (lookupJarFile): Removed.
 
 	* libraries/clib/zip/ZipFile.c (getZipEntry)
Index: kaffe/kaffe/kaffeh/support.c
diff -u kaffe/kaffe/kaffeh/support.c:1.61 kaffe/kaffe/kaffeh/support.c:1.62
--- kaffe/kaffe/kaffeh/support.c:1.61	Fri Feb 15 20:04:07 2008
+++ kaffe/kaffe/kaffeh/support.c	Fri Feb 15 23:34:43 2008
@@ -868,7 +868,8 @@
 			unsigned char *buf;
 			classFile hand;
 			Hjava_lang_Class tmpClass;
-			
+			zzip_size_t length;
+
 			/* JAR file */
 			jfile = zzip_opendir(superName);
 			if (jfile == 0) {
@@ -884,7 +885,9 @@
 				continue;
 			}
 
+			length = getUncompressedSize(jentry);
 			buf = getDataJarFile(jentry);
+			zzip_file_close(jentry);
                         if (buf == NULL) {
 				zzip_closedir(jfile);
 				continue;
@@ -893,7 +896,7 @@
 			classFileInit(&hand,
 				      buf,
 				      buf,
-				      getUncompressedSize(jentry),
+				      length,
 				      CP_ZIPFILE);
 
 			objectDepth++;
Index: kaffe/kaffe/kaffevm/findInJar.c
diff -u kaffe/kaffe/kaffevm/findInJar.c:1.80 kaffe/kaffe/kaffevm/findInJar.c:1.81
--- kaffe/kaffe/kaffevm/findInJar.c:1.80	Fri Feb 15 20:04:07 2008
+++ kaffe/kaffe/kaffevm/findInJar.c	Fri Feb 15 23:34:43 2008
@@ -215,6 +215,7 @@
 		{
 		        ZZIP_FILE * entry;
 			unsigned char* data;
+			zzip_size_t length;
 
 DBG(CLASSLOOKUP,	dprintf("Opening JAR file %s for %s\n", ptr->path, cname); );
 			if (ptr->u.jar == 0) {
@@ -232,11 +233,13 @@
 			if (entry == 0) {
 				break;
 			}
-			if (getUncompressedSize(entry) == 0) {
+			length = getUncompressedSize(entry);
+			if (0 == length) {
 				hand->type = CP_NULLCLASS;
 				goto done;
 			}
 			data = getDataJarFile(entry);
+			zzip_file_close(entry);
 			if (data == 0) {
 				postExceptionMessage(einfo,
 					JAVA_IO(IOException),
@@ -248,7 +251,7 @@
 			classFileInit(hand,
 				      data,
 				      data,
-				      getUncompressedSize(entry),
+				      length,
 				      CP_ZIPFILE);
 
 			if (Kaffe_JavaVMArgs.enableVerboseClassloading) {
@@ -633,7 +636,7 @@
 	char* mfdata;
 	char* attrEntry;
 	char* ret;
-	zzip_ssize_t i;
+	zzip_ssize_t i, manifest_length;
 	int posAttrValue;
 
 	/* Locate manifest entry in jar */
@@ -642,13 +645,17 @@
 		return (NULL);
 
 	/* Read it */
+	manifest_length = getUncompressedSize(mf);
 	mfdata = (char*)getDataJarFile(mf);
-	if (mfdata == 0)
-		return (NULL);
+	zzip_file_close(mf);
+	if (mfdata == 0) {
+	  return (NULL);
+	}
 
 	/* Look for the desired entry */
 	attrEntry = mfdata;
-	for (i = 0; i < getUncompressedSize(mf); ++i) {
+
+	  for (i = 0; i < manifest_length; ++i) {
 		/* Sun's jar, even under Linux, insists on terminating
 		   newlines with newline *and* carriage return */
 		if (mfdata[i] == '\n' || mfdata[i] == '\r') {
@@ -664,7 +671,7 @@
 					++attrEntry;
 
 				/* Now look for end of string. */
-				while (i < getUncompressedSize(mf) && attrEntry[i] != 0xd)
+				while (i < manifest_length && attrEntry[i] != 0xd)
 					++i;
 
 				attrEntry[i] = '\0';
Index: kaffe/libraries/clib/zip/ZipFile.c
diff -u kaffe/libraries/clib/zip/ZipFile.c:1.5 kaffe/libraries/clib/zip/ZipFile.c:1.6
--- kaffe/libraries/clib/zip/ZipFile.c:1.5	Fri Feb 15 20:04:08 2008
+++ kaffe/libraries/clib/zip/ZipFile.c	Fri Feb 15 23:34:44 2008
@@ -97,9 +97,10 @@
   Hjava_util_zip_ZipEntry* zentry = NULL;
 
   entry = getZipEntry(zip, zname);
-
-  if (entry != NULL)
+  if (entry != NULL) {
     zentry = makeZipEntry(entry, zname);
+    zzip_file_close(entry);
+  }
   
   return (zentry);
 }
@@ -121,7 +122,7 @@
 	  ZZIP_FILE *entry = getZipEntry( zip, unhand(zentry)->name);
 	  if (entry != NULL)
 	    buf = getDataJarFile(entry);
-
+	  zzip_file_close(entry);
 	  if (buf == 0) {
 	    return (NULL);
 	  }
@@ -159,6 +160,7 @@
 	  if (NULL != zip_entry) {
 	    entry = zzip_file_open(zfile, zip_entry->d_name, 0);
 	    elems[i] = (HObject*)makeZipEntry(entry, stringC2Java(zip_entry->d_name));
+	    zzip_file_close(entry);
 	    i++;
 	  }
 	}while (zip_entry != NULL);




More information about the kaffe mailing list