From da4ff2bde1dbb2ebe0d7b1e81ff7e460411b13f5 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 23 Jul 2012 20:22:01 +0000 Subject: [PATCH] Bugfix: Use a mutex to control non-curses output Without this, there is no guarantee writes won't overlap (and it happens quite a bit on Windows with the bitforce driver) --- cgminer.c | 10 ++++------ logging.c | 2 ++ miner.h | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cgminer.c b/cgminer.c index 20623974..87e23f80 100644 --- a/cgminer.c +++ b/cgminer.c @@ -164,7 +164,7 @@ static int total_threads; static pthread_mutex_t hash_lock; static pthread_mutex_t qd_lock; static pthread_mutex_t *stgd_lock; -static pthread_mutex_t curses_lock; +pthread_mutex_t console_lock; static pthread_mutex_t ch_lock; static pthread_rwlock_t blk_lock; @@ -1323,12 +1323,12 @@ struct cgpu_info *cpus; #ifdef HAVE_CURSES static inline void unlock_curses(void) { - mutex_unlock(&curses_lock); + mutex_unlock(&console_lock); } static inline void lock_curses(void) { - mutex_lock(&curses_lock); + mutex_lock(&console_lock); } static bool curses_active_locked(void) @@ -5056,9 +5056,7 @@ int main(int argc, char *argv[]) mutex_init(&hash_lock); mutex_init(&qd_lock); -#ifdef HAVE_CURSES - mutex_init(&curses_lock); -#endif + mutex_init(&console_lock); mutex_init(&control_lock); mutex_init(&sharelog_lock); mutex_init(&ch_lock); diff --git a/logging.c b/logging.c index 26e01960..47d1970d 100644 --- a/logging.c +++ b/logging.c @@ -34,7 +34,9 @@ static void my_log_curses(__maybe_unused int prio, char *f, va_list ap) strcpy(f + len - 1, " \n"); + mutex_lock(&console_lock); vprintf(f, ap); + mutex_unlock(&console_lock); } } diff --git a/miner.h b/miner.h index 6aaa314e..3f55670f 100644 --- a/miner.h +++ b/miner.h @@ -576,6 +576,8 @@ extern bool fulltest(const unsigned char *hash, const unsigned char *target); extern int opt_scantime; +extern pthread_mutex_t console_lock; + extern pthread_mutex_t restart_lock; extern pthread_cond_t restart_cond;