diff --git a/parity/io_handler.rs b/parity/io_handler.rs
index ee6d6130f..a94582b1d 100644
--- a/parity/io_handler.rs
+++ b/parity/io_handler.rs
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-use std::sync::Arc;
+use std::sync::{Arc, Weak};
use ethcore::client::Client;
use ethcore::service::{NetSyncMessage, SyncMessage};
use ethsync::EthSync;
@@ -30,7 +30,7 @@ pub struct ClientIoHandler {
pub sync: Arc,
pub accounts: Arc,
pub info: Informant,
- pub network: Arc>,
+ pub network: Weak>,
}
impl IoHandler for ClientIoHandler {
@@ -49,12 +49,16 @@ impl IoHandler for ClientIoHandler {
match *message {
NetworkIoMessage::User(SyncMessage::StartNetwork) => {
info!("Starting network");
- self.network.start().unwrap_or_else(|e| warn!("Error starting network: {:?}", e));
- EthSync::register(&*self.network, self.sync.clone()).unwrap_or_else(|e| warn!("Error registering eth protocol handler: {}", e));
+ if let Some(network) = self.network.upgrade() {
+ network.start().unwrap_or_else(|e| warn!("Error starting network: {:?}", e));
+ EthSync::register(&*network, self.sync.clone()).unwrap_or_else(|e| warn!("Error registering eth protocol handler: {}", e));
+ }
},
NetworkIoMessage::User(SyncMessage::StopNetwork) => {
info!("Stopping network");
- self.network.stop().unwrap_or_else(|e| warn!("Error stopping network: {:?}", e));
+ if let Some(network) = self.network.upgrade() {
+ network.stop().unwrap_or_else(|e| warn!("Error stopping network: {:?}", e));
+ }
},
_ => {/* Ignore other messages */},
}
diff --git a/parity/main.rs b/parity/main.rs
index 9680f8a03..5bc5f1b48 100644
--- a/parity/main.rs
+++ b/parity/main.rs
@@ -272,7 +272,7 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
info: Informant::new(conf.have_color()),
sync: sync.clone(),
accounts: account_service.clone(),
- network: service.network(),
+ network: Arc::downgrade(&service.network()),
});
service.register_io_handler(io_handler).expect("Error registering IO handler");