From 6c2a8d8be74a89cdd39ccbd4ccb503f20a71df42 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 3 Nov 2013 23:03:43 +1100 Subject: [PATCH] Force unlocking of the console lock on restart to avoid corrupting the console state when we finally quit. --- cgminer.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/cgminer.c b/cgminer.c index 0f0504e9..081744c3 100644 --- a/cgminer.c +++ b/cgminer.c @@ -3181,9 +3181,22 @@ static void disable_curses_windows(void) delwin(statuswin); } +/* Force locking of curses console_lock on shutdown since a dead thread might + * have grabbed the lock. */ +static bool curses_active_forcelocked(void) +{ + bool ret; + + mutex_trylock(&console_lock); + ret = curses_active; + if (!ret) + unlock_curses(); + return ret; +} + static void disable_curses(void) { - if (curses_active_locked()) { + if (curses_active_forcelocked()) { use_curses = false; curses_active = false; disable_curses_windows(); @@ -7359,15 +7372,11 @@ static void clean_up(bool restarting) #ifdef WIN32 timeEndPeriod(1); #endif - if (!restarting) { - /* Attempting to disable curses or print a summary during a - * restart can lead to a deadlock. */ #ifdef HAVE_CURSES - disable_curses(); + disable_curses(); #endif - if (!opt_realquiet && successful_connect) - print_summary(); - } + if (!restarting && !opt_realquiet && successful_connect) + print_summary(); curl_global_cleanup(); }