Commit 5d8273a399dec91a27553484d7dfc47d68b5634f

Con Kolivas 2013-04-26T17:00:22

Fix potential memory leak with unused work items in bflsc_queue_full

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;
 }