Stop and join all Electrum client threads on SIGINT
This commit is contained in:
parent
165b48ccce
commit
284275e2d1
13
src/rpc.rs
13
src/rpc.rs
|
@ -421,19 +421,26 @@ impl RPC {
|
||||||
let senders = Arc::new(Mutex::new(Vec::<SyncSender<Message>>::new()));
|
let senders = Arc::new(Mutex::new(Vec::<SyncSender<Message>>::new()));
|
||||||
let acceptor = RPC::start_acceptor(addr);
|
let acceptor = RPC::start_acceptor(addr);
|
||||||
RPC::start_notifier(notification, senders.clone(), acceptor.sender());
|
RPC::start_notifier(notification, senders.clone(), acceptor.sender());
|
||||||
|
let mut children = vec![];
|
||||||
while let Some((stream, addr)) = acceptor.receiver().recv().unwrap() {
|
while let Some((stream, addr)) = acceptor.receiver().recv().unwrap() {
|
||||||
let query = query.clone();
|
let query = query.clone();
|
||||||
let senders = senders.clone();
|
let senders = senders.clone();
|
||||||
let stats = stats.clone();
|
let stats = stats.clone();
|
||||||
thread::spawn(move || {
|
children.push(thread::spawn(move || {
|
||||||
info!("[{}] connected peer", addr);
|
info!("[{}] connected peer", addr);
|
||||||
let conn = Connection::new(query, stream, addr, stats);
|
let conn = Connection::new(query, stream, addr, stats);
|
||||||
senders.lock().unwrap().push(conn.chan.sender());
|
senders.lock().unwrap().push(conn.chan.sender());
|
||||||
conn.run();
|
conn.run();
|
||||||
info!("[{}] disconnected peer", addr);
|
info!("[{}] disconnected peer", addr);
|
||||||
});
|
}));
|
||||||
|
}
|
||||||
|
info!("stopping RPC server");
|
||||||
|
for sender in senders.lock().unwrap().iter() {
|
||||||
|
let _ = sender.send(Message::Done);
|
||||||
|
}
|
||||||
|
for child in children {
|
||||||
|
let _ = child.join();
|
||||||
}
|
}
|
||||||
info!("stopping RPC server")
|
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
handle
|
handle
|
||||||
|
|
Loading…
Reference in New Issue
Block a user