Synchronization issue - wait not in guarded block
-------------------------------------------------

                 Key: ZOOKEEPER-1191
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1191
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.4.0
            Reporter: Alexander Shraer
            Assignee: Alexander Shraer
            Priority: Minor
             Fix For: 3.4.0


In Leader.java, getEpochToPropose() and waitForEpochAck() have the following 
code:

if (readyToStart && verifier.containsQuorum(electingFollowers)) {
     electionFinished = true;
     electingFollowers.notifyAll();
} else {
     electingFollowers.wait(self.getInitLimit()*self.getTickTime());
     if (waitingForNewEpoch) {
        throw new InterruptedException("Out of time to propose an epoch");
     }
}       

In Java, the wait statement can wake up without being notified, interrupted, or 
timing out, a so-called spurious wakeup. So it should be guarded by a while 
loop with the condition we're waiting for.




--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to