Author: mturk
Date: Wed Apr 22 12:23:34 2009
New Revision: 767483

URL: http://svn.apache.org/viewvc?rev=767483&view=rev
Log:
Do not throw exceptions from finalize

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/shared/descriptor.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=767483&r1=767482&r2=767483&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
 Wed Apr 22 12:23:34 2009
@@ -46,6 +46,9 @@
     private native void close0()
         throws IOException, InstantiationException;
 
+    private native void close1()
+        throws Throwable;
+
     private native void sync0()
         throws SyncFailedException, IOException, InstantiationException;
 
@@ -58,12 +61,7 @@
     protected final void finalize()
         throws Throwable
     {
-        try {
-            close0();
-        } catch (InstantiationException ex) {
-            // Class is alreay uninitialized.
-            // Ignore.
-        }
+        close1();
     }
 
     /**

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=767483&r1=767482&r2=767483&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
 Wed Apr 22 12:23:34 2009
@@ -36,7 +36,8 @@
     private native void cleanup0()
         throws Throwable;
 
-    private native void cleanup1();
+    private native void cleanup1()
+        throws Throwable;
 
     /**
      * Size in bytes of the storage needed to represent the Pointer.

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=767483&r1=767482&r2=767483&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Wed Apr 
22 12:23:34 2009
@@ -107,7 +107,7 @@
 {
     if (_clazzn.i && J4MID(0000)) {
         acr_descriptor_callback_fn_t *callback;
-        jint  i  = GET_IFIELD_I(0000, _O);
+        jint   i = GET_IFIELD_I(0000, _O);
         jniptr p = GET_IFIELD_P(0001, _O);
         jniptr c = GET_IFIELD_P(0002, _O);
 
@@ -131,6 +131,28 @@
         ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINSTANCE, 0);
 }
 
+ACR_JNI_EXPORT_DECLARE(void, Descriptor, close1)(ACR_JNISTDARGS)
+{
+    if (_clazzn.i && J4MID(0000)) {
+        acr_descriptor_callback_fn_t *callback;
+        jint   i = GET_IFIELD_I(0000, _O);
+        jniptr p = GET_IFIELD_P(0001, _O);
+        jniptr c = GET_IFIELD_P(0002, _O);
+
+        if (p) {
+            SET_IFIELD_P(0001, _O, 0);
+        }
+        if (i >= 0) {
+            SET_IFIELD_I(0000, _O, -1);
+        }
+
+        callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c);
+        if (callback) {
+            (*callback)(ACR_DESC_CLOSE, i, (void *)((acr_ptr_t)p));
+        }
+    }
+}
+
 ACR_JNI_EXPORT_DECLARE(void, Descriptor, sync0)(ACR_JNISTDARGS)
 {
     if (_clazzn.i && J4MID(0000)) {


Reply via email to