Browse Source

Sort the blocks database in reverse order, allowing us to remove the first block without iterating over them. Output the block number to debug.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
57c3b12f64
  1. 26
      cgminer.c

26
cgminer.c

@ -2814,7 +2814,7 @@ static inline bool from_existing_block(struct work *work) @@ -2814,7 +2814,7 @@ static inline bool from_existing_block(struct work *work)
static int block_sort(struct block *blocka, struct block *blockb)
{
return blockb->block_no - blocka->block_no;
return blocka->block_no - blockb->block_no;
}
static void test_work_current(struct work *work)
@ -2834,29 +2834,29 @@ static void test_work_current(struct work *work) @@ -2834,29 +2834,29 @@ static void test_work_current(struct work *work)
* new block and set the current block details to this one */
if (!block_exists(hexstr)) {
struct block *s = calloc(sizeof(struct block), 1);
int deleted_block = 0;
if (unlikely(!s))
quit (1, "test_work_current OOM");
strcpy(s->hash, hexstr);
s->block_no = new_blocks++;
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;
/* Only keep the last hour's worth of 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) > 6) {
struct block *oldblock;
HASH_SORT(blocks, block_sort);
HASH_ITER(hh, blocks, blocka, blockb) {
if (count++ < 6)
continue;
HASH_DEL(blocks, blocka);
free(blocka);
}
oldblock = blocks;
deleted_block = oldblock->block_no;
HASH_DEL(blocks, oldblock);
free(oldblock);
}
HASH_ADD_STR(blocks, hash, s);
wr_unlock(&blk_lock);
if (deleted_block)
applog(LOG_DEBUG, "Deleted block %d from database", deleted_block);
set_curblock(hexstr, work->data);
if (unlikely(new_blocks == 1))
goto out_free;

Loading…
Cancel
Save