mirror of
https://github.com/Cyrix126/gupaxx.git
synced 2024-12-22 14:49:21 +00:00
fix: more deadlocks
This commit is contained in:
parent
bcc80d0da7
commit
883d001988
2 changed files with 24 additions and 9 deletions
|
@ -329,12 +329,24 @@ Uptime = 0h 2m 4s
|
|||
)));
|
||||
|
||||
process.lock().unwrap().state = ProcessState::Alive;
|
||||
PubXmrigApi::update_from_output(&public, &output_parse, &output_pub, elapsed, &process);
|
||||
PubXmrigApi::update_from_output(
|
||||
&mut public.lock().unwrap(),
|
||||
&output_parse,
|
||||
&output_pub,
|
||||
elapsed,
|
||||
&mut process.lock().unwrap(),
|
||||
);
|
||||
println!("{:#?}", process);
|
||||
assert!(process.lock().unwrap().state == ProcessState::NotMining);
|
||||
|
||||
let output_parse = Arc::new(Mutex::new(String::from("[2022-02-12 12:49:30.311] net new job from 192.168.2.1:3333 diff 402K algo rx/0 height 2241142 (11 tx)")));
|
||||
PubXmrigApi::update_from_output(&public, &output_parse, &output_pub, elapsed, &process);
|
||||
PubXmrigApi::update_from_output(
|
||||
&mut public.lock().unwrap(),
|
||||
&output_parse,
|
||||
&output_pub,
|
||||
elapsed,
|
||||
&mut process.lock().unwrap(),
|
||||
);
|
||||
assert!(process.lock().unwrap().state == ProcessState::Alive);
|
||||
}
|
||||
|
||||
|
|
|
@ -532,13 +532,17 @@ 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(
|
||||
&pub_api,
|
||||
&mut pub_api_lock,
|
||||
&output_pub,
|
||||
&output_parse,
|
||||
start.elapsed(),
|
||||
&process,
|
||||
&mut process_lock,
|
||||
);
|
||||
drop(pub_api_lock);
|
||||
drop(process_lock);
|
||||
// Send an HTTP API request
|
||||
debug!("XMRig Watchdog | Attempting HTTP API request...");
|
||||
match PrivXmrigApi::request_xmrig_api(&client, &api_uri, token).await {
|
||||
|
@ -743,17 +747,16 @@ impl PubXmrigApi {
|
|||
// This combines the buffer from the PTY thread [output_pub]
|
||||
// with the actual [PubApiXmrig] output field.
|
||||
pub fn update_from_output(
|
||||
public: &Arc<Mutex<Self>>,
|
||||
public: &mut Self,
|
||||
output_parse: &Arc<Mutex<String>>,
|
||||
output_pub: &Arc<Mutex<String>>,
|
||||
elapsed: std::time::Duration,
|
||||
process: &Arc<Mutex<Process>>,
|
||||
process: &mut Process,
|
||||
) {
|
||||
// 1. Take the process's current output buffer and combine it with Pub (if not empty)
|
||||
let mut output_pub = output_pub.lock().unwrap();
|
||||
|
||||
{
|
||||
let mut public = public.lock().unwrap();
|
||||
if !output_pub.is_empty() {
|
||||
public.output.push_str(&std::mem::take(&mut *output_pub));
|
||||
}
|
||||
|
@ -764,9 +767,9 @@ impl PubXmrigApi {
|
|||
// 2. Check for "new job"/"no active...".
|
||||
let mut output_parse = output_parse.lock().unwrap();
|
||||
if XMRIG_REGEX.new_job.is_match(&output_parse) {
|
||||
process.lock().unwrap().state = ProcessState::Alive;
|
||||
process.state = ProcessState::Alive;
|
||||
} else if XMRIG_REGEX.not_mining.is_match(&output_parse) {
|
||||
process.lock().unwrap().state = ProcessState::NotMining;
|
||||
process.state = ProcessState::NotMining;
|
||||
}
|
||||
|
||||
// 3. Throw away [output_parse]
|
||||
|
|
Loading…
Reference in a new issue