Skip to content

Commit bee38a2

Browse files
committed
Add drop_guard to NetworkController
Signed-off-by: Eval EXEC <execvy@gmail.com>
1 parent 53e9f03 commit bee38a2

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

network/src/network.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,8 +1095,12 @@ impl NetworkService {
10951095
.unzip();
10961096

10971097
let receiver: CancellationToken = new_tokio_exit_rx();
1098+
1099+
let server_canceller: CancellationToken = CancellationToken::new();
1100+
10981101
let (start_sender, start_receiver) = mpsc::channel();
10991102
{
1103+
let server_canceller_clone = server_canceller.clone();
11001104
let network_state = Arc::clone(&network_state);
11011105
let p2p_control: ServiceAsyncControl = p2p_control.clone().into();
11021106
handle.spawn_task(async move {
@@ -1134,6 +1138,15 @@ impl NetworkService {
11341138

11351139
break;
11361140
},
1141+
_ = server_canceller_clone.cancelled() => {
1142+
1143+
debug!("NetworkController dropped, start shutdown...");
1144+
let _ = p2p_control.shutdown().await;
1145+
// Drop senders to stop all corresponding background task
1146+
drop(bg_signals);
1147+
1148+
break;
1149+
},
11371150
else => {
11381151
let _ = p2p_control.shutdown().await;
11391152
// Drop senders to stop all corresponding background task
@@ -1165,6 +1178,7 @@ impl NetworkService {
11651178
network_state,
11661179
p2p_control,
11671180
ping_controller,
1181+
server_canceller,
11681182
})
11691183
}
11701184
}
@@ -1176,6 +1190,13 @@ pub struct NetworkController {
11761190
network_state: Arc<NetworkState>,
11771191
p2p_control: ServiceControl,
11781192
ping_controller: Option<Sender<()>>,
1193+
server_canceller: CancellationToken,
1194+
}
1195+
1196+
impl Drop for NetworkController {
1197+
fn drop(&mut self) {
1198+
self.server_canceller.cancel();
1199+
}
11791200
}
11801201

11811202
impl NetworkController {

util/stop-handler/src/stop_register.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use ckb_channel::TrySendError;
2-
use ckb_logger::{debug, error, info, trace, warn};
2+
use ckb_logger::{debug, info, trace, warn};
33
use ckb_util::Mutex;
44
use tokio_util::sync::CancellationToken;
55

0 commit comments

Comments
 (0)