Author: mturk Date: Fri Apr 17 13:02:56 2009 New Revision: 765975 URL: http://svn.apache.org/viewvc?rev=765975&view=rev Log: Throw InstatntiationException if operation made on unitialized library
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c commons/sandbox/runtime/trunk/src/main/native/shared/error.c commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java Fri Apr 17 13:02:56 2009 @@ -44,10 +44,10 @@ } private native void close0() - throws IOException; + throws IOException, InstantiationException; private native void sync0() - throws SyncFailedException, IOException; + throws SyncFailedException, IOException, InstantiationException; /** * Called by the garbage collector when the object is destroyed. @@ -58,7 +58,12 @@ protected final void finalize() throws Throwable { - close0(); + try { + close0(); + } catch (InstantiationException ex) { + // Class is alreay uninitialized. + // Ignore. + } } /** @@ -70,20 +75,27 @@ * </p> * @see java.io.Closeable#close() * @throws IOException if an I/O error occurs. + * @thrown InstantiationException if native class loader was not initialized. */ public final void close() throws IOException { - close0(); + try { + close0(); + } catch (InstantiationException ex) { + // Class is alreay uninitialized. + // TODO: We could rethrow IOException here. + } } /** * Force the underlying object to synchonize any buffered data. * @throws SyncFailedException when the object cannot be flushed. * @throws IOException if an I/O error occurs. + * @thrown InstantiationException if native class loader was not initialized. */ public final void sync() - throws SyncFailedException, IOException + throws SyncFailedException, IOException, InstantiationException { sync0(); } Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Fri Apr 17 13:02:56 2009 @@ -77,8 +77,13 @@ */ protected final void finalize() throws Throwable - { - cleanup0(); + { + try { + cleanup0(); + } catch (InstantiationException ex) { + // Class is alreay uninitialized. + // Ignore. + } } /** Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h Fri Apr 17 13:02:56 2009 @@ -44,6 +44,7 @@ ACR_EX_EINVAL, /* java/lang/IllegalArgumentException */ ACR_EX_EINDEX, /* java/lang/IndexOutOfBoundsException */ ACR_EX_ECCAST, /* java/lang/ClassCastException */ + ACR_EX_EINSTANCE, /* java/lang/InstatntiationException */ ACR_EX_EIO, /* java/io/IOException */ ACR_EX_ESYNC, /* java/io/SyncFailedException */ ACR_EX_ESOCK /* java/net/SocketException */ Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Fri Apr 17 13:02:56 2009 @@ -123,60 +123,69 @@ ACR_JNI_EXPORT_DECLARE(void, Descriptor, close0)(ACR_JNISTDARGS) { - acr_descriptor_callback_fn_t *callback; - jint i = GET_IFIELD_I(0000, _O); + if (_clazzn.i && _m0000n.i) { + acr_descriptor_callback_fn_t *callback; + jint i = GET_IFIELD_I(0000, _O); #if CC_SIZEOF_VOIDP == 8 - jlong p = GET_IFIELD_J(0001, _O); - jlong c = GET_IFIELD_J(0002, _O); + jlong p = GET_IFIELD_J(0001, _O); + jlong c = GET_IFIELD_J(0002, _O); - if (p) { - SET_IFIELD_J(0001, _O, 0); - } + if (p) { + SET_IFIELD_J(0001, _O, 0); + } #else - jlong p = GET_IFIELD_I(0001, _O); - jlong c = GET_IFIELD_I(0002, _O); + jlong p = GET_IFIELD_I(0001, _O); + jlong c = GET_IFIELD_I(0002, _O); - if (p) { - SET_IFIELD_I(0001, _O, 0); - } + if (p) { + SET_IFIELD_I(0001, _O, 0); + } #endif - if (i >= 0) { - SET_IFIELD_I(0000, _O, -1); - } + if (i >= 0) { + SET_IFIELD_I(0000, _O, -1); + } - callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c); - if (callback) { - int rc = (*callback)(ACR_DESC_CLOSE, i, (void *)((acr_ptr_t)p)); - if (rc) { - /* Throw IOException with errno message */ - ACR_ThrowException(_E, THROW_FMARK, ACR_EX_EIO, rc); + callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c); + if (callback) { + int rc = (*callback)(ACR_DESC_CLOSE, i, (void *)((acr_ptr_t)p)); + if (rc) { + /* Throw IOException with errno message */ + ACR_ThrowException(_E, THROW_FMARK, ACR_EX_EIO, rc); + } } } + else + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINSTANCE, 0); } ACR_JNI_EXPORT_DECLARE(void, Descriptor, sync0)(ACR_JNISTDARGS) { - acr_descriptor_callback_fn_t *callback; - jint i = GET_IFIELD_I(0000, _O); + if (_clazzn.i && _m0000n.i) { + acr_descriptor_callback_fn_t *callback; + jint i = GET_IFIELD_I(0000, _O); #if CC_SIZEOF_VOIDP == 8 - jlong p = GET_IFIELD_J(0001, _O); - jlong c = GET_IFIELD_J(0002, _O); + jlong p = GET_IFIELD_J(0001, _O); + jlong c = GET_IFIELD_J(0002, _O); #else - jlong p = GET_IFIELD_I(0001, _O); - jlong c = GET_IFIELD_I(0002, _O); + jlong p = GET_IFIELD_I(0001, _O); + jlong c = GET_IFIELD_I(0002, _O); #endif - callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c); - if (callback) { - int rc = (*callback)(ACR_DESC_SYNC, i, (void *)((acr_ptr_t)p)); - if (rc) { - if (rc == ACR_EINVAL) - ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESYNC, 0); - else - ACR_ThrowException(_E, THROW_FMARK, ACR_EX_EIO, rc); + callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c); + if (callback) { + int rc = (*callback)(ACR_DESC_SYNC, i, (void *)((acr_ptr_t)p)); + if (rc) { + if (rc == ACR_EINVAL) + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESYNC, 0); + else + ACR_ThrowException(_E, THROW_FMARK, ACR_EX_EIO, rc); + } } } + else + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINSTANCE, 0); + } ACR_DECLARE(jobject) ACR_DescriptorCreate(JNIEnv *_E, int i, void *p, Modified: commons/sandbox/runtime/trunk/src/main/native/shared/error.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/error.c?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/error.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/error.c Fri Apr 17 13:02:56 2009 @@ -30,6 +30,7 @@ "java/lang/IllegalArgumentException", "java/lang/IndexOutOfBoundsException", "java/lang/ClassCastException", + "java/lang/InstatntiationException", "java/io/IOException", "java/io/SyncFailedException", "java/net/SocketException", Modified: commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c?rev=765975&r1=765974&r2=765975&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Fri Apr 17 13:02:56 2009 @@ -110,30 +110,35 @@ ACR_JNI_EXPORT_DECLARE(void, Pointer, cleanup0)(ACR_JNISTDARGS) { - acr_pointer_cleanup_fn_t *cleanup; + if (_clazzn.i && _m0000n.i) { + acr_pointer_cleanup_fn_t *cleanup; #if CC_SIZEOF_VOIDP == 8 - jlong h = GET_IFIELD_J(0000, _O); - jlong c = GET_IFIELD_J(0001, _O); + jlong h = GET_IFIELD_J(0000, _O); + jlong c = GET_IFIELD_J(0001, _O); - if (h) { - SET_IFIELD_J(0000, _O, 0); - } + if (h) { + SET_IFIELD_J(0000, _O, 0); + } #else - jint h = GET_IFIELD_I(0000, _O); - jint c = GET_IFIELD_I(0001, _O); + jint h = GET_IFIELD_I(0000, _O); + jint c = GET_IFIELD_I(0001, _O); - if (h) { - SET_IFIELD_I(0000, _O, 0); - } + if (h) { + SET_IFIELD_I(0000, _O, 0); + } #endif - cleanup = (acr_pointer_cleanup_fn_t *)((acr_ptr_t)c); - if (cleanup) { - int rc = (*cleanup)((void *)((acr_ptr_t)h)); - if (rc) { - /* Throw RuntimeException with errno message */ - ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ERUNTIME, rc); + cleanup = (acr_pointer_cleanup_fn_t *)((acr_ptr_t)c); + if (cleanup) { + int rc = (*cleanup)((void *)((acr_ptr_t)h)); + if (rc) { + /* Throw RuntimeException with errno message */ + ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ERUNTIME, rc); + } } } + else + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINSTANCE, 0); + } ACR_DECLARE(jobject) ACR_PointerCreate(JNIEnv *_E, void *p,