Force unlocking of the console lock on restart to avoid corrupting the console state when we finally quit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
diff --git a/cgminer.c b/cgminer.c
index 0f0504e..081744c 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();
}