@@ -1095,8 +1095,12 @@ impl NetworkService {
1095
1095
. unzip ( ) ;
1096
1096
1097
1097
let receiver: CancellationToken = new_tokio_exit_rx ( ) ;
1098
+
1099
+ let server_canceller: CancellationToken = CancellationToken :: new ( ) ;
1100
+
1098
1101
let ( start_sender, start_receiver) = mpsc:: channel ( ) ;
1099
1102
{
1103
+ let server_canceller_clone = server_canceller. clone ( ) ;
1100
1104
let network_state = Arc :: clone ( & network_state) ;
1101
1105
let p2p_control: ServiceAsyncControl = p2p_control. clone ( ) . into ( ) ;
1102
1106
handle. spawn_task ( async move {
@@ -1134,6 +1138,15 @@ impl NetworkService {
1134
1138
1135
1139
break ;
1136
1140
} ,
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
+ } ,
1137
1150
else => {
1138
1151
let _ = p2p_control. shutdown( ) . await ;
1139
1152
// Drop senders to stop all corresponding background task
@@ -1165,6 +1178,7 @@ impl NetworkService {
1165
1178
network_state,
1166
1179
p2p_control,
1167
1180
ping_controller,
1181
+ server_canceller,
1168
1182
} )
1169
1183
}
1170
1184
}
@@ -1176,6 +1190,13 @@ pub struct NetworkController {
1176
1190
network_state : Arc < NetworkState > ,
1177
1191
p2p_control : ServiceControl ,
1178
1192
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
+ }
1179
1200
}
1180
1201
1181
1202
impl NetworkController {
0 commit comments