Skip to content

Commit 0e1ae78

Browse files
committed
Fix listener error hanging shutdown when aborting startup.
Signed-off-by: Jason Volk <jason@zemos.net>
1 parent d4b3f16 commit 0e1ae78

2 files changed

Lines changed: 12 additions & 14 deletions

File tree

‎src/main/tests/snapshots/listener_init_err__listener_init_err@listener_init_err.snap‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ description: Listener Initialization Err
44
expression: result
55
---
66
Err(
7-
Shutdown hanging after error.,
7+
I/O error: No such file or directory (os error 2),
88
)

‎src/router/run.rs‎

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ use std::{
55

66
use futures::{FutureExt, pin_mut};
77
use tuwunel_core::{
8-
Error, Result, Server, debug, debug_error, debug_info, error, info,
9-
utils::{BoolExt, future::OptionFutureExt},
8+
Error, Result, Server, debug, debug_error, debug_info, error, info, utils::BoolExt,
109
};
1110
use tuwunel_service::Services;
1211

@@ -30,23 +29,22 @@ pub(crate) async fn run(services: Arc<Services>) -> Result {
3029
.runtime()
3130
.spawn(signal(server.clone(), handle.clone()));
3231

33-
let listener = services
34-
.config
35-
.listening
36-
.then_async(|| {
37-
server
38-
.runtime()
39-
.spawn(serve::serve(services.clone(), handle))
40-
.map(|res| res.map_err(Error::from).unwrap_or_else(Err))
41-
})
42-
.unwrap_or_else_async(|| server.until_shutdown().map(Ok));
32+
let listener = services.config.listening.then_async(|| {
33+
server
34+
.runtime()
35+
.spawn(serve::serve(services.clone(), handle))
36+
.map(|res| res.map_err(Error::from).unwrap_or_else(Err))
37+
});
4338

4439
// Focal point
4540
debug!("Running");
4641
pin_mut!(listener);
4742
let res = tokio::select! {
4843
res = &mut listener => res.unwrap_or(Ok(())),
49-
res = services.poll() => handle_services_finish(server, res, listener.await),
44+
res = services.poll() => {
45+
server.until_shutdown().await;
46+
handle_services_finish(server, res, listener.await)
47+
},
5048
};
5149

5250
// Join the signal handler before we leave.

0 commit comments

Comments
 (0)