From 0feb679b67a5214a8eceff4e587659a7517db2f8 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 23 Aug 2012 12:19:23 +1000 Subject: [PATCH] Only keep the last 6 blocks in the uthash database to keep memory usage constant. Storing more is unhelpful anyway. --- cgminer.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cgminer.c b/cgminer.c index ef18bdb3..5b15e859 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);