From 0606cdf7aa56515b4cbcf3e74e6b57e4a83d85a1 Mon Sep 17 00:00:00 2001 From: Cyrix126 <58007246+Cyrix126@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:38:53 +0100 Subject: [PATCH] fix: release v1.8.1 fix deadlock --- Cargo.lock | 18 ++++++------ Cargo.toml | 2 +- src/helper/xrig/xmrig.rs | 54 +++++++++++++++++++--------------- src/helper/xrig/xmrig_proxy.rs | 3 +- 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d8d2387..5e54398 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -725,9 +725,9 @@ checksum = "2225b558afc76c596898f5f1b3fc35cfce0eb1b13635cbd7d1b2a7177dc10ccd" [[package]] name = "built" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" +checksum = "73848a43c5d63a1251d17adf6c2bf78aa94830e60a335a95eeea45d6ba9e1e4d" [[package]] name = "bumpalo" @@ -1633,9 +1633,9 @@ dependencies = [ [[package]] name = "filedescriptor" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e" +checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" dependencies = [ "libc", "thiserror 1.0.69", @@ -2042,7 +2042,7 @@ dependencies = [ [[package]] name = "gupaxx" -version = "1.8.0" +version = "1.8.1" dependencies = [ "anyhow", "benri", @@ -4822,9 +4822,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.23" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "serde", @@ -5990,9 +5990,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index 7e2c25a..ec29167 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ cargo-features = ["profile-rustflags", "codegen-backend"] [package] name = "gupaxx" -version = "1.8.0" +version = "1.8.1" authors = ["cyrix126 <gupaxx@baermail.fr>"] description = "Fork of Gupax integrating the XMRvsBeast Raffle " documentation = "https://github.com/cyrix126/gupaxx" diff --git a/src/helper/xrig/xmrig.rs b/src/helper/xrig/xmrig.rs index de98b1f..8788128 100644 --- a/src/helper/xrig/xmrig.rs +++ b/src/helper/xrig/xmrig.rs @@ -645,23 +645,25 @@ impl Helper { } // Always update from output debug!("XMRig Watchdog | Starting [update_from_output()]"); - let mut process_lock = process.lock().unwrap(); - let mut pub_api_lock = pub_api.lock().unwrap(); - PubXmrigApi::update_from_output( - &mut pub_api_lock, - &output_pub, - &output_parse, - start.elapsed(), - &mut process_lock, - &process_p2pool.lock().unwrap(), - &process_xp.lock().unwrap(), - proxy_img, - p2pool_img, - proxy_state, - p2pool_state, - ); - drop(pub_api_lock); - drop(process_lock); + { + let process_p2pool_lock = &process_p2pool.lock().unwrap(); + let mut process_lock = process.lock().unwrap(); + let process_xp_lock = &process_xp.lock().unwrap(); + let mut pub_api_lock = pub_api.lock().unwrap(); + PubXmrigApi::update_from_output( + &mut pub_api_lock, + &output_pub, + &output_parse, + start.elapsed(), + &mut process_lock, + process_p2pool_lock, + process_xp_lock, + proxy_img, + p2pool_img, + proxy_state, + p2pool_state, + ); + } // Send an HTTP API request debug!("XMRig Watchdog | Attempting HTTP API request..."); match PrivXmrigApi::request_xmrig_api(&client, &api_uri_summary, token).await { @@ -677,22 +679,26 @@ impl Helper { } } // if mining on proxy and proxy is not alive, switch back to p2pool node - if (pub_api.lock().unwrap().pool + debug!("update from priv ok"); + // unlock first process_xp and then pub_api + let process_p2pool_lock = &process_p2pool.lock().unwrap(); + let process_xp_lock = &process_xp.lock().unwrap(); + let pub_api_lock = pub_api.lock().unwrap(); + if (pub_api_lock.pool == Some(Pool::XmrigProxy( proxy_state - .current_ports(&process_xp.lock().unwrap(), &proxy_img.lock().unwrap()) + .current_ports(process_xp_lock, &proxy_img.lock().unwrap()) .0, )) - || pub_api.lock().unwrap().pool.is_none()) - && !process_xp.lock().unwrap().is_alive() - && process_p2pool.lock().unwrap().is_alive() + || pub_api_lock.pool.is_none()) + && !process_xp_lock.is_alive() + && process_p2pool_lock.is_alive() { info!( "XMRig Process | redirect xmrig to p2pool since XMRig-Proxy is not alive and p2pool is alive" ); let pool = Pool::P2pool( - p2pool_state - .current_port(&process_p2pool.lock().unwrap(), &p2pool_img.lock().unwrap()), + p2pool_state.current_port(process_p2pool_lock, &p2pool_img.lock().unwrap()), ); if let Err(err) = update_xmrig_config( &client, diff --git a/src/helper/xrig/xmrig_proxy.rs b/src/helper/xrig/xmrig_proxy.rs index fa9bf3c..0cc13f7 100644 --- a/src/helper/xrig/xmrig_proxy.rs +++ b/src/helper/xrig/xmrig_proxy.rs @@ -502,6 +502,7 @@ impl Helper { // Always update from output // todo: check difference with xmrig debug!("XMRig-Proxy Watchdog | Starting [update_from_output()]"); + let process_p2pool_lock = process_p2pool.lock().unwrap(); let mut process_lock = process.lock().unwrap(); let mut pub_api_lock = pub_api.lock().unwrap(); PubXmrigProxyApi::update_from_output( @@ -510,7 +511,7 @@ impl Helper { &output_parse, start.elapsed(), &mut process_lock, - &process_p2pool.lock().unwrap(), + &process_p2pool_lock, p2pool_img, p2pool_state, state,