summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-21 13:42:13 +0200
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-21 13:42:13 +0200
commitf62786575d01811b4af057c35f8ed4c7a43a4429 (patch)
treed9ba14c2e3f9acbdafc4c0d5fb0cdd35ab56797c
parentc8693857ceaf837cebf63a3e2d5e73dbfbfafd26 (diff)
Fix race condition in MasterProposer.
-rw-r--r--same/src/main/java/com/orbekk/paxos/MasterProposer.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/same/src/main/java/com/orbekk/paxos/MasterProposer.java b/same/src/main/java/com/orbekk/paxos/MasterProposer.java
index 129f336..7dc5090 100644
--- a/same/src/main/java/com/orbekk/paxos/MasterProposer.java
+++ b/same/src/main/java/com/orbekk/paxos/MasterProposer.java
@@ -82,11 +82,14 @@ public class MasterProposer extends Thread {
}
private void checkDone() {
- if (numPromises.get() > numRequests / 2) {
- result.set(proposalNumber);
- done.countDown();
- } else if (numResponses.get() >= numRequests) {
- result.set(bestPromise.get());
+ if (numPromises.get() > numRequests / 2 ||
+ numResponses.get() >= numRequests) {
+ // Test again to avoid race condition.
+ if (numPromises.get() > numRequests / 2) {
+ result.set(proposalNumber);
+ } else {
+ result.set(bestPromise.get());
+ }
done.countDown();
}
}