Permalink
Browse files

Only restart threads that are not stuck waiting on lp staged work, an…

…d add one mandatory queued work item for each restart.
  • Loading branch information...
ckolivas committed Jul 14, 2011
1 parent 7e38a37 commit ba4ba7f65c4c5e66cd2adeccd721fc671a89dadf
Showing with 9 additions and 1 deletion.
  1. +9 −1 main.c
View
10 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);
}

0 comments on commit ba4ba7f

Please sign in to comment.