On Wed, Mar 18, 2009 at 7:20 AM, <toad at freenetproject.org> wrote:
> Author: toad
> Date: 2009-03-17 23:20:32 +0000 (Tue, 17 Mar 2009)
> New Revision: 26071
>
> Modified:
> ? branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
> ? branches/db4o/freenet/src/freenet/support/io/FileBucket.java
> ? branches/db4o/freenet/src/freenet/support/io/TempFileBucket.java
> Log:
> Fix deleting shadowed tempfiles on exit, and never deleting even if
> deleteOnExit=true if it is a parameter.
> Paranoia, logging.
>
>
> Modified: branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java
> ===================================================================
> --- branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java ?
> ?2009-03-17 23:18:47 UTC (rev 26070)
> +++ branches/db4o/freenet/src/freenet/support/io/BaseFileBucket.java ?
> ?2009-03-17 23:20:32 UTC (rev 26071)
> @@ -35,15 +35,16 @@
> ? ? ? ?public BaseFileBucket(File file) {
> ? ? ? ? ? ? ? ?if(file == null) throw new NullPointerException();
> ? ? ? ? ? ? ? ?this.length = file.length();
> - ? ? ? ? ? ? ? if(deleteOnExit()) {
> - ? ? ? ? ? ? ? ? ? ? ? try {
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? file.deleteOnExit();
> - ? ? ? ? ? ? ? ? ? ? ? } catch (NullPointerException e) {
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
> if(WrapperManager.hasShutdownHookBeenTriggered()) {
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Logger.normal(this,
> "NullPointerException setting deleteOnExit while shutting down - buggy JVM
> code: "+e, e);
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Logger.error(this, "Caught "+e+"
> doing deleteOnExit() for "+file+" - JVM bug ????");
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
> + ? ? ? }
> +
> + ? ? ? protected void setDeleteOnExit(File file) {
> + ? ? ? ? ? ? ? try {
> + ? ? ? ? ? ? ? ? ? ? ? file.deleteOnExit();
> + ? ? ? ? ? ? ? } catch (NullPointerException e) {
> + ? ? ? ? ? ? ? ? ? ? ? if(WrapperManager.hasShutdownHookBeenTriggered()) {
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Logger.normal(this, "NullPointerException
> setting deleteOnExit while shutting down - buggy JVM code: "+e, e);
> + ? ? ? ? ? ? ? ? ? ? ? } else {
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Logger.error(this, "Caught "+e+" doing
> deleteOnExit() for "+file+" - JVM bug ????");
More likely this file have been "deactivated" then being a JVM bug.
Consider how other db4o application do this, the
activate-deactivate-reactivate usage is uncommon.
Most other applications never reactivating objects.
I guess your usage pattern is not well tested in production.