diff --git a/cgminer.c b/cgminer.c index bd5a7ed2..d1046459 100644 --- a/cgminer.c +++ b/cgminer.c @@ -6614,7 +6614,13 @@ static void flush_queue(struct cgpu_info *cgpu) { struct work *work = NULL; - wr_lock(&cgpu->qlock); + if (unlikely(!cgpu)) + return; + + /* Use only a trylock in case we get into a deadlock with a queueing + * function holding the read lock when we're called. */ + if (wr_trylock(&cgpu->qlock)) + return; work = cgpu->unqueued_work; cgpu->unqueued_work = NULL; wr_unlock(&cgpu->qlock);