Commit 0feb679b67a5214a8eceff4e587659a7517db2f8

Con Kolivas 2012-08-23T12:19:23

Only keep the last 6 blocks in the uthash database to keep memory usage constant. Storing more is unhelpful anyway.

diff --git a/cgminer.c b/cgminer.c
index ef18bdb..5b15e85 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -2858,6 +2858,20 @@ static void test_work_current(struct work *work)
 			quit (1, "test_work_current OOM");
 		strcpy(s->hash, hexstr);
 		wr_lock(&blk_lock);
+		/* Only keep the last 6 blocks in memory since work from blocks
+		 * before this is virtually impossible and we want to prevent
+		 * memory usage from continually rising */
+		if (HASH_COUNT(blocks) > 5) {
+			struct block *blocka, *blockb;
+			int count = 0;
+
+			HASH_ITER(hh, blocks, blocka, blockb) {
+				if (count++ < 6)
+					continue;
+				HASH_DEL(blocks, blocka);
+				free(blocka);
+			}
+		}
 		HASH_ADD_STR(blocks, hash, s);
 		wr_unlock(&blk_lock);
 		set_curblock(hexstr, work->data);