Tomás Fernández Löbbe created SOLR-11782:
--------------------------------------------

             Summary: LatchWatcher.await doesn’t protect against spurious wakeup
                 Key: SOLR-11782
                 URL: https://issues.apache.org/jira/browse/SOLR-11782
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
            Reporter: Tomás Fernández Löbbe
            Priority: Minor


I noticed that {{LatchWatcher.await}} does:
{code}
public void await(long timeout) throws InterruptedException {
      synchronized (lock) {
        if (this.event != null) return;
        lock.wait(timeout);
      }
    }
{code}
while the recommendation of lock.wait is to check the wait condition even after 
the method returns in case of spurious wakeup. {{lock}} is a private local 
field to which {{notifyAll}} is called only after a zk event is being handled. 
I think we should check the {{await}} method to something like:

{code}
public void await(long timeout) throws InterruptedException {
      assert timeout > 0;
      long timeoutTime = System.currentTimeMillis() + timeout;
      synchronized (lock) {
        while (this.event == null) {
          long nextTimeout = timeoutTime - System.currentTimeMillis();
          if (nextTimeout <= 0) {
            return;
          }
          lock.wait(nextTimeout);
        }
      }
    }
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to