Hi,

runFinalizersOnExit is deprecated, but this should be no problem for most users....

However, I want to use HSQL with the JVM wonka, and in wonka this method is not implemented at all. Since just commmenting out is a bad idea, I substituted that thing with a shutdownhook. See patch

Any ideas or suggestions?

Cheers
Jochen
--- hsqldb-orig/src/org/hsqldb/LockFile.java    Sat Feb  7 16:10:47 2004
+++ hsqldb/src/org/hsqldb/LockFile.java Tue Feb 24 17:35:36 2004
@@ -192,6 +192,7 @@
      * And opaque reference to this object's heatbeat task.
      */
     private Object timerTask;
+               
 
     /**
      * Attempts to read the hearbeat timestamp from this object's lock file
@@ -814,7 +815,13 @@
         if (locked) {
             writeMagic();
             startHeartbeat();
-
+                                               //substitute for  runFinalizersOnExit  
   
+                                               //the Thread will keep a reference to 
this LockFile Object,
+                                               // so it won't be gc'ed :-(((
+                                               //however, there won't be too many 
lockfiles around...
+                                               
Runtime.getRuntime().addShutdownHook(new FinalHook(this));
+/*     wonka does not have the deprecated runFinalizersOnExit(true)
+a shutdownhook should do the job instead.
             try {
 
                 // attempt to ensure that tryRelease() gets called if/when
@@ -825,6 +832,7 @@
             } catch (Exception e) {
                 trace(mn + e.toString());
             }
+                                               */
         } else {
             try {
                 releaseImpl();
@@ -938,7 +946,25 @@
      *        if any, that it has on its lock file.
      */
     protected void finalize() throws Throwable {
-        trace("finalize(): calling tryRelease()");
+        trace("finalize(): calling tryRelease()");             
         tryRelease();
+                               
     }
+       
+               private class FinalHook extends Thread{
+                       private LockFile lockFile;                      
+                       private FinalHook(){};
+                       public FinalHook(LockFile _lockFile){
+                               lockFile=_lockFile;
+                       }
+
+                       public void run(){
+                               lockFile.trace("finalize(): calling tryRelease()");    
         
+                               try{
+        lockFile.tryRelease(); }
+                               catch(Throwable t){}//what to do now?
+                       }
+               
+               
+               }
 }

Reply via email to