mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
Avoid recursive locks in fill_queue.
This commit is contained in:
parent
ec9390dc4e
commit
29f0ac77da
14
cgminer.c
14
cgminer.c
@ -5728,15 +5728,19 @@ static void fill_queue(struct thr_info *mythr, struct cgpu_info *cgpu, struct de
|
||||
{
|
||||
thread_reportout(mythr);
|
||||
do {
|
||||
struct work *work;
|
||||
bool need_work;
|
||||
|
||||
rd_lock(&cgpu->qlock);
|
||||
need_work = (HASH_COUNT(cgpu->queued_work) == cgpu->queued_count);
|
||||
rd_unlock(&cgpu->qlock);
|
||||
|
||||
if (need_work) {
|
||||
struct work *work = get_work(mythr, thr_id);
|
||||
|
||||
wr_lock(&cgpu->qlock);
|
||||
if (HASH_COUNT(cgpu->queued_work) == cgpu->queued_count) {
|
||||
work = get_work(mythr, thr_id);
|
||||
work->device_diff = MIN(drv->max_diff, work->work_difficulty);
|
||||
HASH_ADD_INT(cgpu->queued_work, id, work);
|
||||
}
|
||||
wr_unlock(&cgpu->qlock);
|
||||
}
|
||||
/* The queue_full function should be used by the driver to
|
||||
* actually place work items on the physical device if it
|
||||
* does have a queue. */
|
||||
|
Loading…
Reference in New Issue
Block a user