diff --git a/iguana/iguana_init.c b/iguana/iguana_init.c index 141b56514..cefc86782 100755 --- a/iguana/iguana_init.c +++ b/iguana/iguana_init.c @@ -272,9 +272,9 @@ void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp) lastbundle = hash2; if ( (block= iguana_blockfind("parse",coin,hash2)) != 0 ) block->mainchain = 1, block->height = height; + bp->emitfinish = (uint32_t)time(NULL) + 1; if ( iguana_bundleload(coin,&bp->ramchain,bp,2) != 0 ) { - bp->emitfinish = (uint32_t)time(NULL) + 1; if ( coin->current != 0 && coin->current->hdrsi+1 == bp->hdrsi ) coin->current = bp; } diff --git a/iguana/iguana_recv.c b/iguana/iguana_recv.c index 487406eea..884fed732 100755 --- a/iguana/iguana_recv.c +++ b/iguana/iguana_recv.c @@ -1429,14 +1429,15 @@ int32_t iguana_processrecv(struct iguana_info *coin) // single threaded flag += iguana_processrecvQ(coin,&newhwm); flag += iguana_reqblocks(coin); flag += iguana_reqhdrs(coin); + coin->RTramchain_busy = 1; if ( time(NULL) > coin->laststats ) { - coin->RTramchain_busy = 1; - flag += (iguana_realtime_update(coin) > 0); - coin->RTramchain_busy = (coin->RTgenesis == 0 || queue_size(&balancesQ) != 0); iguana_bundlestats(coin,str,IGUANA_DEFAULTLAG); coin->laststats = (uint32_t)time(NULL); } + else if ( coin->RTheight < coin->longestchain-3 ) + flag += (iguana_realtime_update(coin) > 0); + coin->RTramchain_busy = (coin->RTgenesis == 0 || queue_size(&balancesQ) != 0); iguana_jsonQ(); if ( hwmheight != coin->blocks.hwmchain.height ) flag = 1; diff --git a/iguana/iguana_unspents.c b/iguana/iguana_unspents.c index 82d9b2946..0a02688c6 100755 --- a/iguana/iguana_unspents.c +++ b/iguana/iguana_unspents.c @@ -1402,8 +1402,14 @@ int32_t iguana_realtime_update(struct iguana_info *coin) if ( iguana_ramchainfile(coin,dest,&blockR,bp,bundlei,block) == 0 ) { //iguana_RTramchainfree(coin); - char str[65]; printf("RT error [%d:%d] %s %p\n",bp->hdrsi,bundlei,bits256_str(str,bp->hashes[bundlei]),block); - iguana_blockQ("RT",coin,bp,bundlei,bp->hashes[bundlei],1); + if ( bits256_nonz(bp->hashes[bundlei]) != 0 ) + { + uint8_t serialized[512]; int32_t len; struct iguana_peer *addr; + char str[65]; printf("RT error [%d:%d] %s %p\n",bp->hdrsi,bundlei,bits256_str(str,bp->hashes[bundlei]),block); + addr = coin->peers.ranked[rand() % 8]; + if ( addr != 0 && (len= iguana_getdata(coin,serialized,MSG_BLOCK,&bp->hashes[bundlei],1)) > 0 ) + iguana_send(coin,addr,serialized,len); + } return(-1); } else iguana_ramchain_free(coin,&blockR,1); B[bundlei] = block->RO;