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