summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2023-11-16 17:03:57 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2023-12-04 09:06:59 +0100
commitad7beb86f0ea5e796de5a352309d4f798c5d7b63 (patch)
treeb2924224c1688b7e02ae8faa3d2696351624392a
parent5a8b75effca1d8b563190021b40cc73f37302798 (diff)
downloadmullvadvpn-ad7beb86f0ea5e796de5a352309d4f798c5d7b63.tar.xz
mullvadvpn-ad7beb86f0ea5e796de5a352309d4f798c5d7b63.zip
Add more error handling
-rw-r--r--mullvad-daemon/src/api.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/mullvad-daemon/src/api.rs b/mullvad-daemon/src/api.rs
index 9f60bab8ed..6a69beda65 100644
--- a/mullvad-daemon/src/api.rs
+++ b/mullvad-daemon/src/api.rs
@@ -46,6 +46,8 @@ pub enum Error {
pub enum ActorError {
#[error(display = "AccessModeSelector is not receiving any messages.")]
SendFailed(#[error(source)] mpsc::TrySendError<Message>),
+ #[error(display = "AccessModeSelector is not receiving any messages.")]
+ OneshotSendFailed,
#[error(display = "AccessModeSelector is not responding.")]
NotRunning(#[error(source)] oneshot::Canceled),
}
@@ -154,22 +156,29 @@ impl AccessModeSelector {
async fn into_future(mut self) {
while let Some(cmd) = self.cmd_rx.next().await {
- let _ = match cmd {
+ let execution = match cmd {
Message::Get(tx) => self.on_get_access_method(tx),
Message::Set(tx, value) => self.on_set_access_method(tx, value),
Message::Next(tx) => self.on_next_connection_mode(tx),
Message::Update(tx, values) => self.on_update_access_methods(tx, values),
+ };
+ match execution {
+ Ok(_) => (),
+ Err(err) => {
+ log::trace!(
+ "AccessModeSelector is going down due to {error}",
+ error = err
+ );
+ break;
+ }
}
- .map_err(|err| {
- log::error!("todo(markus): Some error occured {err}");
- err
- });
}
}
fn reply<T>(&self, tx: ResponseTx<T>, value: T) -> Result<()> {
- // TODO(markus): The error probably should come from the value/tx
- tx.send(Ok(value)).map_err(|_| Error::Generic)
+ Ok(tx
+ .send(Ok(value))
+ .map_err(|_| ActorError::OneshotSendFailed)?)
}
fn on_get_access_method(&mut self, tx: ResponseTx<AccessMethodSetting>) -> Result<()> {