Alan Bateman wrote:
That bug is that deleteOnExit is throwing IllegalStateException during
shutdown when it shouldn't. That bug has been there for a while but
has been masked by 6526376 (fixed early in jdk7).
Before the fix for 6829503 (after 6526376 was fixed),
DeleteOnExitHook#add never throws IllegalStateException since the files
field is never null as it is initialized in the static initializer.
I'll fix this bug.
Mandy
Alan Bateman wrote:
Mandy Chung wrote:
Hi Martin,
Thanks for catching the regression. I created a Sun bug # 6829503
for bug 2.
With the fix for 6829503, ApplicationShutdownHook and
DeleteOnExitHook are both lazily initialized. Since it is possible
that a file could be added to the list for DeletedOnExit during
shutdown, perhaps we also need to change the Shutdown.add method to
allow DeleteOnExitHook to be added during shutdown.
I should pick up this bug since my fix caused this regression. Or do
you want to revise the patch?
I also missed this case when reviewing the changes (sorry) but at
least it has been caught in good time I think you will need to allow
hooks be added during the shutdown, if only to allow deleteOnExit to
register a first file for deletion when invoked from a shutdown hook
(I realize this isn't the issue that Martin ran into but I see we've
got this issue also).
One idea is for Shutdown#add to not check the state but instead return
a boolean to indicate if shutdown is in progress.
ApplicationShutdownHooks.<clinit> could use this to determine if its
hooks map should be initialized or not. That way, addShutdownHook will
behave as expected and throw IllegalStateException during shutdown. If
addShutdownHook is first invoked during shutdown it will be harmless
because its runHooks will simply process an empty map. As you said,
deleteOnExit also has a problem in that DeleteOnExitHook.<clinit> can
fail to register its hook. You'll actually be fixing a second (and I
think unreported) bug that has existed for some time. That bug is that
deleteOnExit is throwing IllegalStateException during shutdown when it
shouldn't. That bug has been there for a while but has been masked by
6526376 (fixed early in jdk7).
-Alan.