summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs3
-rw-r--r--mullvad-daemon/src/tunnel_state_machine/mod.rs4
2 files changed, 6 insertions, 1 deletions
diff --git a/mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs b/mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs
index e01789094b..20abcc7ec2 100644
--- a/mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs
+++ b/mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs
@@ -42,7 +42,8 @@ impl TunnelState for DisconnectedState {
Ok(TunnelCommand::Connect(parameters)) => {
NewState(ConnectingState::enter(shared_values, parameters))
}
- _ => SameState(self),
+ Ok(_) => SameState(self),
+ Err(_) => Finished,
}
}
}
diff --git a/mullvad-daemon/src/tunnel_state_machine/mod.rs b/mullvad-daemon/src/tunnel_state_machine/mod.rs
index 2d94bd066e..83bb22c011 100644
--- a/mullvad-daemon/src/tunnel_state_machine/mod.rs
+++ b/mullvad-daemon/src/tunnel_state_machine/mod.rs
@@ -216,6 +216,7 @@ impl From<EventConsequence<TunnelStateWrapper>> for TunnelStateMachineAction {
}
SameState(state) => Repeat(state),
NoEvents(state) => Notify(Some(state), Ok(Async::NotReady)),
+ Finished => Notify(None, Ok(Async::Ready(None))),
}
}
}
@@ -233,6 +234,8 @@ enum EventConsequence<T: TunnelState> {
SameState(T),
/// No events were received, the event loop should block until one becomes available.
NoEvents(T),
+ /// The state machine has finished its execution.
+ Finished,
}
impl<T> EventConsequence<T>
@@ -356,6 +359,7 @@ impl TunnelState for TunnelStateWrapper {
NewState(tunnel_state) => NewState(tunnel_state),
SameState(state) => SameState(TunnelStateWrapper::$state(state)),
NoEvents(state) => NoEvents(TunnelStateWrapper::$state(state)),
+ Finished => Finished,
}
}
)*