From ba4ba7f65c4c5e66cd2adeccd721fc671a89dadf Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 14 Jul 2011 11:26:56 +1000 Subject: [PATCH] Only restart threads that are not stuck waiting on lp staged work, and add one mandatory queued work item for each restart. --- main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 216444e2..c03b024d 100644 --- a/main.c +++ b/main.c @@ -1924,8 +1924,16 @@ static void *watchdog_thread(void *userdata) for (i = 0; i < mining_threads; i++) { struct thr_info *thr = &thr_info[i]; - if (now.tv_sec - thr->last.tv_sec > 60) { + /* Do not kill threads waiting on longpoll staged work */ + if (now.tv_sec - thr->last.tv_sec > 60 && !lp_staged) { applog(LOG_ERR, "Attempting to restart thread %d, idle for more than 60 seconds", i); + /* Create one mandatory work item */ + inc_staged(1, true); + if (unlikely(!queue_request())) { + applog(LOG_ERR, "Failed to queue_request in watchdog_thread"); + kill_work(); + break; + } reinit_thread(i); applog(LOG_WARNING, "Thread %d restarted", i); }