Don't attempt to disable curses or print a summary during an app restart to prevent deadlocks.
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 48 49 50 51 52 53 54 55 56 57
diff --git a/cgminer.c b/cgminer.c
index 31fa6e1..d298241 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -3264,14 +3264,14 @@ const
#endif
char **initial_args;
-static void clean_up(void);
+static void clean_up(bool restarting);
void app_restart(void)
{
applog(LOG_WARNING, "Attempting to restart %s", packagename);
__kill_work();
- clean_up();
+ clean_up(true);
#if defined(unix) || defined(__APPLE__)
if (forkpid > 0) {
@@ -7219,7 +7219,7 @@ void print_summary(void)
fflush(stdout);
}
-static void clean_up(void)
+static void clean_up(bool restarting)
{
#ifdef HAVE_OPENCL
clear_adl(nDevs);
@@ -7234,18 +7234,22 @@ static void clean_up(void)
#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 (!opt_realquiet && successful_connect)
+ print_summary();
+ }
curl_global_cleanup();
}
void _quit(int status)
{
- clean_up();
+ clean_up(false);
#if defined(unix) || defined(__APPLE__)
if (forkpid > 0) {