You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Björn Buchner (JIRA)" <ji...@apache.org> on 2014/06/14 10:38:01 UTC

[jira] [Created] (IO-448) FileUtils.waitFor(...) swallows thread interrupted status

Björn Buchner created IO-448:
--------------------------------

             Summary: FileUtils.waitFor(...) swallows thread interrupted status
                 Key: IO-448
                 URL: https://issues.apache.org/jira/browse/IO-448
             Project: Commons IO
          Issue Type: Bug
          Components: Utilities
    Affects Versions: 2.4
            Reporter: Björn Buchner
            Priority: Minor


The method waits for a file to appear for a given amount of time. To do so it calls Thread.sleep several times. If the thread is interrupted, the interrupt will be ignored by catching the ThreadInterrupted exception and waiting further.

Catching the ThreadInterrupted exception automatically clears the thread's interrupted flag. Consequently the calling method has no chance to detect whether the thread was interrupted. A possible solution is to restore the interrupted status before returning - something like this:
{code}
    public static boolean waitFor(File file, int seconds) {
        int timeout = 0;
        int tick = 0;
        boolean wasInterrupted = false;
        try {
            while (!file.exists()) {
                // ...
                try {
                    Thread.sleep(100);
                } catch (InterruptedException ignore) {
                    wasInterrupted = true;
                } catch (Exception ex) {
                    break;
                }
            }
            return true;
        } finally {
            if (wasInterrupted) {
                   Thread.currentThread.interrupt();
            }
        }
    }
{code}




--
This message was sent by Atlassian JIRA
(v6.2#6252)