diff options
| -rw-r--r-- | mullvad-daemon/src/tunnel_state_machine/disconnected_state.rs | 3 | ||||
| -rw-r--r-- | mullvad-daemon/src/tunnel_state_machine/mod.rs | 4 |
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, } } )* |
