|
|
@@ -242,7 +242,19 @@ impl KVServer {
|
|
|
),
|
|
|
// Somebody has attempted, or is attempting, start().
|
|
|
Err(prev_term) => {
|
|
|
- prev_term != Self::ATTEMPTING_TERM && prev_term < hold_term
|
|
|
+ let start =
|
|
|
+ prev_term != Self::ATTEMPTING_TERM && prev_term < hold_term;
|
|
|
+ if start {
|
|
|
+ let set = result_holder.term.compare_exchange(
|
|
|
+ prev_term,
|
|
|
+ Self::ATTEMPTING_TERM,
|
|
|
+ Ordering::SeqCst,
|
|
|
+ Ordering::SeqCst,
|
|
|
+ );
|
|
|
+ set.is_ok()
|
|
|
+ } else {
|
|
|
+ false
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
if start {
|