cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: NPE in FileUtils.removeDir(FileUtils.java:126) on shutdown
Date Fri, 16 Apr 2010 18:30:11 GMT

On Friday 16 April 2010 9:12:27 am moslm wrote:
> I'm using CXF 2.2.5, running on Java 1.6 and Tomcat 6.18.
> 
> When the Tomcat server is stopped, we get always the following
> NullPointerException:
> 
> INFO: Stopping Coyote HTTP/1.1 on http-8080
> Exception in thread "Thread-14" java.lang.NullPointerException
> 	at org.apache.cxf.helpers.FileUtils.removeDir(FileUtils.java:126)
> 	at org.apache.cxf.helpers.FileUtils$1.run(FileUtils.java:75)
> 
> 
> I did a little debugging:
> 
> During the first usage of CXF the FileUtils.getDefaultTempDir() is called.
> It resolves the tmp-dir correctly. At the end the
> "private static File defaultTempDir" is set to the right directory.
> Then the method schedules the removal of the tmp-dir like this:
>              Thread hook = new Thread() {
>                 @Override
>                 public void run() {
>                     removeDir(defaultTempDir);
>                 }
>             };
>             Runtime.getRuntime().addShutdownHook(hook);
> 
> 
> So far, so good.  When stopping Tomcat (== stopping the JVM) the hook is
> "fired".
> The removeDir(defaultTempDir) is called. But "defaultTempDir" is 'null' and
> in consequence
> the NPE is thrown.
> 
> Any idea why the static defaultTempDir is lost when the ShutdownHooks are
> fired?  A Bug? 

Hmm..  very strange.   Maybe part of the classloader is GC'd before the hook 
is set?   Fairly easy to fix I think:

            final File f2 = f;
            Thread hook = new Thread() {
                @Override
                public void run() {
                    removeDir(f2);
                }
            };
to make it not use the static and instead use an instance field for the hook.  
I'll commit that.


-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog

Mime
View raw message