Skip to content

Commit

Permalink
fix: terminate ephemeral and location loop immediately on channel close
Browse files Browse the repository at this point in the history
When scheduler is destroyed, e.g. during a key import,
there is some time between destroying the interrupt channel
and the loop task.

To avoid busy looping, tasks should terminate if
receiving from the interrupt loop fails
instead of treating it as the interrupt.
  • Loading branch information
link2xt committed Mar 15, 2024
1 parent 76bbd5f commit 8cc348b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
18 changes: 15 additions & 3 deletions src/ephemeral.rs
Original file line number Diff line number Diff line change
Expand Up @@ -569,9 +569,21 @@ pub(crate) async fn ephemeral_loop(context: &Context, interrupt_receiver: Receiv
"Ephemeral loop waiting for deletion in {} or interrupt",
duration_to_str(duration)
);
if timeout(duration, interrupt_receiver.recv()).await.is_ok() {
// received an interruption signal, recompute waiting time (if any)
continue;
match timeout(duration, interrupt_receiver.recv()).await {
Ok(Ok(())) => {
// received an interruption signal, recompute waiting time (if any)
continue;
}
Ok(Err(err)) => {
warn!(
context,
"Interrupt channel closed, ephemeral loop exits now: {err:#}."
);
return;
}
Err(_err) => {
// Timeout.
}
}
}

Expand Down
16 changes: 15 additions & 1 deletion src/location.rs
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,21 @@ pub(crate) async fn location_loop(context: &Context, interrupt_receiver: Receive
"Location loop is waiting for {} or interrupt",
duration_to_str(duration)
);
timeout(duration, interrupt_receiver.recv()).await.ok();
match timeout(duration, interrupt_receiver.recv()).await {
Err(_err) => {
info!(context, "Location loop timeout.");
}
Ok(Err(err)) => {
warn!(
context,
"Interrupt channel closed, location loop exits now: {err:#}."
);
return;
}
Ok(Ok(())) => {
info!(context, "Location loop received interrupt.");
}
}
}
}

Expand Down

0 comments on commit 8cc348b

Please sign in to comment.