Use only a trylock in flush queue to prevent deadlocks.
diff --git a/cgminer.c b/cgminer.c
index bd5a7ed..d104645 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);