Commit 2b932ccb8187338f2fecc2610baf96af1b66b66d

Chris Chua 2013-08-16T16:37:43

changes to queueing strategy for BitBurner boards

diff --git a/driver-avalon.c b/driver-avalon.c
index 36d4fc7..b47bff6 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -1016,6 +1016,15 @@ static void *avalon_send_tasks(void *userdata)
 			mutex_unlock(&info->lock);
 		}
 
+		if (usb_ident(avalon) == IDENT_BTB) {
+			// Give other threads the chance to acquire qlock
+			i = 0;
+			do {
+				nmsleep(40);
+			} while (!avalon->shutdown && i++ < 15
+				&& avalon->queued < avalon_get_work_count);
+		}
+
 		mutex_lock(&info->qlock);
 		start_count = avalon->work_array * avalon_get_work_count;
 		end_count = start_count + avalon_get_work_count;
diff --git a/driver-avalon.h b/driver-avalon.h
index 562483b..116e80f 100644
--- a/driver-avalon.h
+++ b/driver-avalon.h
@@ -146,7 +146,7 @@ struct avalon_info {
 
 #define AVALON_WRITE_SIZE (sizeof(struct avalon_task))
 #define AVALON_READ_SIZE (sizeof(struct avalon_result))
-#define AVALON_ARRAY_SIZE 3
+#define AVALON_ARRAY_SIZE 4
 
 #define AVA_GETS_ERROR -1
 #define AVA_GETS_OK 0