You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/05/31 00:36:33 UTC
svn commit: r542962 - in /harmony/enhanced/classlib/trunk/modules:
archive/src/main/java/java/util/zip/
archive/src/main/native/archive/shared/ luni/src/main/native/include/unix/
luni/src/main/native/include/windows/
Author: apetrenko
Date: Wed May 30 15:36:30 2007
New Revision: 542962
URL: http://svn.apache.org/viewvc?view=rev&rev=542962
Log:
Patch for HARMONY-3054 "[classlib][archive] EUT intermittently fail in org.eclipse.jdt.core.tests.compiler.parser.TestAll"
Modified:
harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/ZipFile.java
harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/archiveglob.c
harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.c
harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.h
harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/unix/jclprots.h
harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/windows/jclprots.h
Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/ZipFile.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/ZipFile.java?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/ZipFile.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/ZipFile.java Wed May 30 15:36:30 2007
@@ -134,10 +134,10 @@
/**
* Closes this ZipFile.
*/
- public void close() throws IOException {
- if (fileName != null) {
+ public synchronized void close() throws IOException {
+ if (descriptor != -1 && fileName != null) {
// Only close initialized instances
- closeZipImpl();
+ closeZipImpl(descriptor);
if ((mode & OPEN_DELETE) != 0) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
@@ -147,7 +147,7 @@
});
}
}
-}
+ }
/**
* Answers all of the zip entries contained in this ZipFile.
@@ -204,7 +204,7 @@
private synchronized native int openZipImpl(byte[] fileName1);
- private synchronized native void closeZipImpl() throws IOException;
+ private native void closeZipImpl(long descriptor1) throws IOException;
private native ZipEntry getEntryImpl(long descriptor1, String entryName);
Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/archiveglob.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/archiveglob.c?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/archiveglob.c (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/archiveglob.c Wed May 30 15:36:30 2007
@@ -124,6 +124,7 @@
jclZipFile = next;
}
jclmem_free_memory (env, zipfileHandles);
+ MUTEX_DESTROY (zipfileHandles->mutex);
}
/* Free any global references */
Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.c?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.c (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.c Wed May 30 15:36:30 2007
@@ -96,11 +96,13 @@
* free this on UnLoad if its not already free'd.
*/
zipfileHandles = JCL_CACHE_GET (env, zipfile_handles);
+ MUTEX_ENTER (zipfileHandles->mutex);
jclZipFile->last = (JCLZipFile *) zipfileHandles;
jclZipFile->next = zipfileHandles->next;
if (zipfileHandles->next != NULL)
zipfileHandles->next->last = jclZipFile;
zipfileHandles->next = jclZipFile;
+ MUTEX_EXIT (zipfileHandles->mutex);
(*env)->SetLongField (env, recv,
JCL_CACHE_GET (env,
@@ -119,6 +121,7 @@
PORT_ACCESS_FROM_ENV (env);
I_32 retval;
+ I_32 extraval;
HyZipFile *zipFile;
HyZipEntry zipEntry;
jobject java_ZipEntry, extra;
@@ -161,19 +164,26 @@
extra = NULL;
if (zipEntry.extraFieldLength > 0)
{
+ extraval =
#ifndef HY_ZIP_API
- zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
+ zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
#else /* HY_ZIP_API */
- zipFuncs->zip_getZipEntryExtraField (VMI, zipFile, &zipEntry, NULL,
+ zipFuncs->zip_getZipEntryExtraField (VMI, zipFile, &zipEntry, NULL,
#endif /* HY_ZIP_API */
zipEntry.extraFieldLength);
- if (zipEntry.extraField == NULL)
+ if (extraval || zipEntry.extraField == NULL)
{
#ifndef HY_ZIP_API
zip_freeZipEntry (PORTLIB, &zipEntry);
#else /* HY_ZIP_API */
zipFuncs->zip_freeZipEntry (VMI, &zipEntry);
#endif /* HY_ZIP_API */
+ if (extraval)
+ {
+ char buf[50];
+ sprintf (buf, "Error %d getting extra field of zip entry", extraval);
+ throwNewInternalError (env, buf);
+ }
return (jobject) NULL;
}
extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength));
@@ -221,7 +231,7 @@
}
JNIEXPORT void JNICALL
-Java_java_util_zip_ZipFile_closeZipImpl (JNIEnv * env, jobject recv)
+Java_java_util_zip_ZipFile_closeZipImpl (JNIEnv * env, jobject recv, jlong zipPointer)
{
PORT_ACCESS_FROM_ENV (env);
#ifdef HY_ZIP_API
@@ -229,14 +239,13 @@
#endif /* HY_ZIP_API */
I_32 retval = 0;
- JCLZipFile *jclZipFile;
- jfieldID descriptorFID =
- JCL_CACHE_GET (env, FID_java_util_zip_ZipFile_descriptor);
+ jfieldID descriptorFID;
+ JCLZipFileLink *zipfileHandles;
+ JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) zipPointer;
#ifdef HY_ZIP_API
HyZipFunctionTable *zipFuncs = (*VMI)->GetZipFunctions(VMI);
#endif /* HY_ZIP_API */
- jclZipFile = (JCLZipFile *) (IDATA) (*env)->GetLongField (env, recv, descriptorFID);
if (jclZipFile != (void *) -1)
{
retval =
@@ -245,13 +254,17 @@
#else /* HY_ZIP_API */
zipFuncs->zip_closeZipFile (VMI, &(jclZipFile->hyZipFile));
#endif /* HY_ZIP_API */
+ descriptorFID = JCL_CACHE_GET (env, FID_java_util_zip_ZipFile_descriptor);
(*env)->SetLongField (env, recv, descriptorFID, -1);
/* Free the zip struct */
+ zipfileHandles = JCL_CACHE_GET (env, zipfile_handles);
+ MUTEX_ENTER (zipfileHandles->mutex);
if (jclZipFile->last != NULL)
jclZipFile->last->next = jclZipFile->next;
if (jclZipFile->next != NULL)
jclZipFile->next->last = jclZipFile->last;
+ MUTEX_EXIT (zipfileHandles->mutex);
jclmem_free_memory (env, jclZipFile);
if (retval)
@@ -323,6 +336,7 @@
return;
zipfileHandles->last = NULL;
zipfileHandles->next = NULL;
+ MUTEX_INIT (zipfileHandles->mutex);
JCL_CACHE_SET (env, zipfile_handles, zipfileHandles);
}
@@ -368,6 +382,7 @@
#endif /* HY_ZIP_API */
I_32 retval;
+ I_32 extraval;
HyZipFile *zipFile;
HyZipEntry zipEntry;
jobject java_ZipEntry, extra;
@@ -419,12 +434,28 @@
extra = NULL;
if (zipEntry.extraFieldLength > 0)
{
+ extraval =
#ifndef HY_ZIP_API
- zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
+ zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL,
#else /* HY_ZIP_API */
- zipFuncs->zip_getZipEntryExtraField (VMI, zipFile, &zipEntry, NULL,
+ zipFuncs->zip_getZipEntryExtraField (VMI, zipFile, &zipEntry, NULL,
#endif /* HY_ZIP_API */
zipEntry.extraFieldLength);
+ if (extraval || zipEntry.extraField == NULL)
+ {
+#ifndef HY_ZIP_API
+ zip_freeZipEntry (PORTLIB, &zipEntry);
+#else /* HY_ZIP_API */
+ zipFuncs->zip_freeZipEntry (VMI, &zipEntry);
+#endif /* HY_ZIP_API */
+ if (extraval)
+ {
+ char buf[50];
+ sprintf (buf, "Error %d getting extra field of zip entry", extraval);
+ throwNewInternalError (env, buf);
+ }
+ return (jobject) NULL;
+ }
extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength));
if (((*env)->ExceptionCheck (env)))
{
@@ -432,7 +463,7 @@
#ifndef HY_ZIP_API
zip_freeZipEntry (PORTLIB, &zipEntry);
#else /* HY_ZIP_API */
- zipFuncs->zip_freeZipEntry (VMI, &zipEntry);
+ zipFuncs->zip_freeZipEntry (VMI, &zipEntry); //not valid zipEntry (-1)
#endif /* HY_ZIP_API */
return NULL;
}
Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.h?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.h (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/native/archive/shared/zip.h Wed May 30 15:36:30 2007
@@ -24,6 +24,8 @@
#include "hyzip.h"
#endif /* HY_ZIP_API */
+#include "hymutex.h"
+
typedef struct JCLZipFile
{
struct JCLZipFile *last;
@@ -36,6 +38,7 @@
{
JCLZipFile *last;
JCLZipFile *next;
+ MUTEX mutex;
} JCLZipFileLink;
#endif /* zip_h */
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/unix/jclprots.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/unix/jclprots.h?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/unix/jclprots.h (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/unix/jclprots.h Wed May 30 15:36:30 2007
@@ -279,7 +279,7 @@
/* NativesCommonZipFile*/
void throwJavaZIOException PROTOTYPE((JNIEnv * env, const char *message));
void throwNewInternalError PROTOTYPE((JNIEnv * env, const char * message));
-void JNICALL Java_java_util_zip_ZipFile_closeZipImpl PROTOTYPE((JNIEnv * env, jobject recv));
+void JNICALL Java_java_util_zip_ZipFile_closeZipImpl PROTOTYPE((JNIEnv * env, jobject recv, jlong descriptor));
jobject JNICALL Java_java_util_zip_ZipFile_00024ZFEnum_getNextEntry PROTOTYPE((JNIEnv * env, jobject recv, jlong descriptor, jlong nextEntry));
void JNICALL Java_java_util_zip_ZipFile_ntvinit PROTOTYPE((JNIEnv * env, jclass cls));
void throwNewIllegalStateException PROTOTYPE((JNIEnv * env, const char * message));
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/windows/jclprots.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/windows/jclprots.h?view=diff&rev=542962&r1=542961&r2=542962
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/windows/jclprots.h (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/windows/jclprots.h Wed May 30 15:36:30 2007
@@ -488,7 +488,7 @@
void throwJavaZIOException PROTOTYPE ((JNIEnv * env, const char *message));
void throwNewInternalError PROTOTYPE ((JNIEnv * env, const char *message));
JNIEXPORT void JNICALL Java_java_util_zip_ZipFile_closeZipImpl
- PROTOTYPE ((JNIEnv * env, jobject recv));
+ PROTOTYPE ((JNIEnv * env, jobject recv, jlong descriptor));
JNIEXPORT jobject JNICALL Java_java_util_zip_ZipFile_00024ZFEnum_getNextEntry
PROTOTYPE ((JNIEnv * env, jobject recv, jlong descriptor,
jlong nextEntry));