mirror of
https://github.com/GOSTSec/sgminer
synced 2025-02-02 01:44:23 +00:00
Change get_work to use a timeout when trying to tq_pop as a sanity failsafe in case of unusual circumstances.
This commit is contained in:
parent
222d4ee6bf
commit
7b9b078114
13
main.c
13
main.c
@ -1149,6 +1149,8 @@ static void flush_requests(bool longpoll)
|
||||
|
||||
static bool get_work(struct work *work, bool queued)
|
||||
{
|
||||
struct timeval now;
|
||||
struct timespec abstime = {};
|
||||
struct thr_info *thr = &thr_info[0];
|
||||
struct work *work_heap;
|
||||
bool ret = false;
|
||||
@ -1157,6 +1159,9 @@ static bool get_work(struct work *work, bool queued)
|
||||
getwork_requested++;
|
||||
|
||||
retry:
|
||||
gettimeofday(&now, NULL);
|
||||
abstime.tv_sec = now.tv_sec + 60;
|
||||
|
||||
if (unlikely(!queued && !queue_request())) {
|
||||
applog(LOG_WARNING, "Failed to queue_request in get_work");
|
||||
goto out;
|
||||
@ -1181,10 +1186,12 @@ retry:
|
||||
applog(LOG_WARNING, "Resumed retrieving work from server");
|
||||
}
|
||||
|
||||
/* wait for 1st response, or get cached response */
|
||||
work_heap = tq_pop(thr->q, NULL);
|
||||
/* Wait for 1st response, or get cached response. We really should
|
||||
* never time out on the pop request but something might go amiss :/
|
||||
*/
|
||||
work_heap = tq_pop(thr->q, &abstime);
|
||||
if (unlikely(!work_heap)) {
|
||||
applog(LOG_WARNING, "Failed to tq_pop in get_work");
|
||||
applog(LOG_INFO, "Failed to tq_pop in get_work");
|
||||
goto out;
|
||||
}
|
||||
dec_queued();
|
||||
|
6
util.c
6
util.c
@ -21,6 +21,7 @@
|
||||
#include <curl/curl.h>
|
||||
#include <time.h>
|
||||
#include <curses.h>
|
||||
#include <errno.h>
|
||||
#include "miner.h"
|
||||
#include "elist.h"
|
||||
|
||||
@ -559,8 +560,11 @@ void *tq_pop(struct thread_q *tq, const struct timespec *abstime)
|
||||
rc = pthread_cond_timedwait(&tq->cond, &tq->mutex, abstime);
|
||||
else
|
||||
rc = pthread_cond_wait(&tq->cond, &tq->mutex);
|
||||
if (rc)
|
||||
if (unlikely(rc)) {
|
||||
if (rc == ETIMEDOUT)
|
||||
applog(LOG_WARNING, "Timed out waiting in tq_pop");
|
||||
goto out;
|
||||
}
|
||||
if (list_empty(&tq->q))
|
||||
goto out;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user