Fix potential memory leak with unused work items in bflsc_queue_full
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
diff --git a/driver-bflsc.c b/driver-bflsc.c
index b367331..8e8c0db 100644
--- a/driver-bflsc.c
+++ b/driver-bflsc.c
@@ -1403,7 +1403,7 @@ re_send:
static bool bflsc_queue_full(struct cgpu_info *bflsc)
{
struct bflsc_info *sc_info = (struct bflsc_info *)(bflsc->device_file);
- struct work *work;
+ struct work *work = NULL;
int i, dev, tried, que;
bool ret = false;
int tries = 0;
@@ -1449,16 +1449,19 @@ static bool bflsc_queue_full(struct cgpu_info *bflsc)
break;
}
- work = get_queued(bflsc);
- if (work) {
- if (bflsc_send_work(bflsc, dev, work))
- break;
- else
- tried = dev;
- } else
+ if (!work)
+ work = get_queued(bflsc);
+ if (unlikely(!work))
+ break;
+ if (bflsc_send_work(bflsc, dev, work)) {
+ work = NULL;
break;
+ } else
+ tried = dev;
}
+ if (unlikely(work))
+ work_completed(bflsc, work);
return ret;
}