PATCH: ShutdownHooks and LoggingDeadlock2
Mandy.Chung at Sun.COM
Tue Apr 14 19:33:00 UTC 2009
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.
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).
More information about the core-libs-dev