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