Skip to content

Commit

Permalink
fix(floresta): don't panic if a lock cannot be obtained to the datadi…
Browse files Browse the repository at this point in the history
…r, RPC and Electrum ports
  • Loading branch information
luisschwab committed Feb 4, 2025
1 parent 7e456c2 commit 89ad5a4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 14 deletions.
32 changes: 21 additions & 11 deletions florestad/src/florestad.rs
Original file line number Diff line number Diff line change
Expand Up @@ -495,11 +495,13 @@ impl Florestad {
// Spawn all services

// Non-TLS Electrum accept loop
let non_tls_listener = Arc::new(
block_on(TcpListener::bind(e_addr))
.unwrap_or_else(|e| panic!("Cannot bind to electrum address {}: {}", e_addr, e)),
);

let non_tls_listener = match block_on(TcpListener::bind(e_addr)) {
Ok(listener) => Arc::new(listener),
Err(_) => {
error!("Failed to bind to address {}. An Electrum server is probably already running.", e_addr);
std::process::exit(-1);
}
};
task::spawn(client_accept_loop(
non_tls_listener,
electrum_server.message_transmitter.clone(),
Expand All @@ -508,10 +510,13 @@ impl Florestad {

// TLS Electrum accept loop
if let Some(tls_acceptor) = tls_acceptor {
let tls_listener =
Arc::new(block_on(TcpListener::bind(ssl_e_addr)).unwrap_or_else(|e| {
panic!("Cannot bind to ssl electrum address {}: {}", ssl_e_addr, e)
}));
let tls_listener = match block_on(TcpListener::bind(ssl_e_addr)) {
Ok(listener) => Arc::new(listener),
Err(_) => {
error!("Failed to bind to address {}. An SSL Electrum server is probably already running.", e_addr);
std::process::exit(-1);
}
};
task::spawn(client_accept_loop(
tls_listener,
electrum_server.message_transmitter.clone(),
Expand Down Expand Up @@ -689,8 +694,13 @@ impl Florestad {
}

fn load_wallet(data_dir: &String) -> AddressCache<KvDatabase> {
let database = KvDatabase::new(data_dir.to_owned()).expect("Could not create a database");
AddressCache::new(database)
match KvDatabase::new(data_dir.to_owned()) {
Ok(database) => AddressCache::new(database),
Err(_) => {
error!("Cannot obtain a lock on data directory {data_dir}. Floresta is probably already running.");
std::process::exit(-1);
}
}
}

fn get_net(net: &crate::Network) -> bitcoin::Network {
Expand Down
13 changes: 10 additions & 3 deletions florestad/src/json_rpc/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -691,9 +691,16 @@ impl RpcImpl {
.unwrap()
});

let listener = tokio::net::TcpListener::bind(address)
.await
.expect("failed to bind rpc server");
let listener = match tokio::net::TcpListener::bind(address).await {
Ok(listener) => listener,
Err(_) => {
error!(
"Failed to bind to address {}. Floresta is probably already running.",
address
);
std::process::exit(-1);
}
};

let router = Router::new()
.route("/", post(json_rpc_request).get(cannot_get))
Expand Down

0 comments on commit 89ad5a4

Please sign in to comment.