commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Checkoway (JIRA)" <>
Subject [jira] Commented: (IO-259) FileAlterationMonitor.stop(boolean allowIntervalToFinish)
Date Sat, 12 Mar 2011 03:18:59 GMT


Dan Checkoway commented on IO-259:

@Niall, thanks!  Much appreciated.  Looking forward to 2.1.

> FileAlterationMonitor.stop(boolean allowIntervalToFinish)
> ---------------------------------------------------------
>                 Key: IO-259
>                 URL:
>             Project: Commons IO
>          Issue Type: Improvement
>            Reporter: Dan Checkoway
>            Assignee: Niall Pemberton
>             Fix For: 2.1
>         Attachments: IO-259.patch
> I'm a long-time user of commons-io, but I just started using FileAlterationMonitor the
other day.  I have a bean in a Spring application context that constructs a FileAlterationMonitor,
and it sets the ThreadFactory to an instance that creates daemon threads.  At context shutdown,
my bean calls .stop() on the monitor.
> The problem is that .stop() currently honors the Thread.sleep(interval), in that it does
a nice friendly thread.join().  If you set your interval high enough, your "graceful app shutdown"
is going to sit there waiting a while.
> Compounding things is that I have *seven* FileAlterationMonitors in my app, all of which
run with a 10-second sleep time.  So at graceful shutdown time, I'm facing a delay of up to
70 seconds...lame!
> So I stopped calling .stop() and since the ThreadFactory created daemon threads, shutdown
is quick.  But...
> I'm running inside tomcat, and when it shuts down it looks for leaks.  And of course
it finds a handful of my threads and complains, such as:
> SEVERE: The web application [/my-webapp] appears to have started a thread named [FileUpdateMonitor-/path/to/my/file.ext]
but has failed to stop it. This is very likely to create a memory leak.
> So what I'm suggesting is an alternate version of FileAlterationMonitor.stop() that takes
"boolean allowIntervalToFinish".  The default behavior won't change (for backward compatibility).
 But if you explicitly call .stop(false), then it will interrupt the sleeping thread immediately.
 That thread wakes up, sees that running=false, and finishes up immediately.
> Patch will be attached in a sec...

This message is automatically generated by JIRA.
For more information on JIRA, see:

View raw message