diff --git a/src/jsonrpc/server.rs b/src/jsonrpc/server.rs index 4d6a45c1..d2933e99 100644 --- a/src/jsonrpc/server.rs +++ b/src/jsonrpc/server.rs @@ -81,7 +81,7 @@ fn read_command( // Handle all messages from this connection. fn connection_handler( - control: sync::Arc>, + control: DaemonControl, mut stream: net::UnixStream, shutdown: sync::Arc, ) -> Result<(), io::Error> { @@ -105,8 +105,8 @@ fn connection_handler( } log::trace!("JSONRPC request: {:?}", serde_json::to_string(&req)); - let response = api::handle_request(&control.lock().unwrap(), req) - .unwrap_or_else(|e| Response::error(req_id, e)); + let response = + api::handle_request(&control, req).unwrap_or_else(|e| Response::error(req_id, e)); log::trace!("JSONRPC response: {:?}", serde_json::to_string(&response)); if let Err(e) = serde_json::to_writer(&stream, &response) { log::error!("Error writing response: '{}'", e); @@ -121,7 +121,7 @@ fn connection_handler( /// The main event loop. Wait for connections, and treat requests sent through them. pub fn rpcserver_loop( listener: net::UnixListener, - daemon_control: sync::Arc>, + daemon_control: DaemonControl, ) -> Result<(), io::Error> { // Keep it simple. We don't need great performances so just treat each connection in // its thread, with a given maximum number of connections. diff --git a/src/lib.rs b/src/lib.rs index 5fcdac43..80f0f71c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -209,6 +209,7 @@ fn setup_bitcoind( Ok(bitcoind.with_retry_limit(None)) } +#[derive(Clone)] pub struct DaemonControl { config: Config, bitcoin: sync::Arc>, @@ -346,8 +347,6 @@ impl DaemonHandle { let listener = rpcserver_setup(&rpc_socket)?; log::info!("JSONRPC server started."); - // FIXME: don't use a Mutex... - let control = sync::Arc::from(sync::Mutex::from(control)); rpcserver_loop(listener, control)?; log::info!("JSONRPC server stopped.");