perf(miner): abort xmrig stat fetches on stop
The miner's stats and pool-API fetches are blocking HTTP calls on the monitor thread with multi-second timeouts. When the miner was stopped, stop() still had to wait out an in-flight request before the monitor thread could join. - Both fetches now install a curl progress callback that aborts the transfer as soon as a stop is requested, so a request in flight ends promptly instead of running down its timeout. - An abort triggered by stop is treated as a clean cancellation, not a fetch failure, so it is not logged or counted against the failure warning. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -157,6 +157,9 @@ private:
|
||||
// Set last_error_ under error_mutex_ (writers run on both the main thread and the monitor thread).
|
||||
void setLastError(std::string e) { std::lock_guard<std::mutex> lk(error_mutex_); last_error_ = std::move(e); }
|
||||
void fetchStatsHttp(); // Blocking HTTP call — runs on monitor thread only
|
||||
// curl xfer-info callback: abort an in-flight stats fetch once stop() is requested.
|
||||
static int abortCb(void* p, int64_t, int64_t, int64_t, int64_t)
|
||||
{ return static_cast<const XmrigManager*>(p)->should_stop_.load() ? 1 : 0; }
|
||||
void fetchPoolApiStats(); // Fetch pool-side stats (hashrate) from pool HTTP API
|
||||
|
||||
std::atomic<State> state_{State::Stopped};
|
||||
|
||||
Reference in New Issue
Block a user