diff --git a/iguana/iguana777.h b/iguana/iguana777.h index a01ea6438..10966c449 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -39,7 +39,7 @@ typedef int32_t (*blockhashfunc)(uint8_t *blockhashp,uint8_t *serialized,int32_t #define IGUANA_MAXPENDHDRS 1 #define _IGUANA_MAXPENDING 3 #define IGUANA_MINPENDBUNDLES 16 -#define IGUANA_MAXPENDBUNDLES 128 +#define IGUANA_MAXPENDBUNDLES 64 #define IGUANA_BUNDLELOOP 7777 #define IGUANA_RPCPORT 7778 #define IGUANA_MAXRAMCHAINSIZE ((uint64_t)1024L * 1024L * 1024L * 16) @@ -474,7 +474,7 @@ struct iguana_info struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending; int32_t numremain,numpendings,zcount,recvcount,bcount,pcount,lastbundle,numsaved; uint32_t recvtime,hdrstime,backstoptime,lastbundletime,numreqsent,numbundlesQ,lastbundleitime; - double backstopmillis; bits256 backstophash2; + double backstopmillis; bits256 backstophash2; int64_t spaceused; int32_t initialheight,mapflags,minconfirms,numrecv,bindsock,isRT,backstop,blocksrecv,merging,polltimeout,numreqtxids,allhashes; bits256 reqtxids[64]; void *launched,*started; uint64_t bloomsearches,bloomhits,bloomfalse,collisions; uint8_t blockspace[IGUANA_MAXPACKETSIZE + 8192]; struct OS_memspace blockMEM; diff --git a/iguana/iguana_bundles.c b/iguana/iguana_bundles.c index 80026b2ce..79857a70d 100755 --- a/iguana/iguana_bundles.c +++ b/iguana/iguana_bundles.c @@ -449,7 +449,7 @@ void iguana_bundlestats(struct iguana_info *coin,char *str) { static uint32_t lastdisp; int32_t i,n,m,count,pending,dispflag,numrecv,done,numhashes,numcached,numsaved,numemit; - int64_t estsize = 0; struct iguana_bundle *bp,*lastpending = 0,*firstgap = 0; double *sortbuf; struct iguana_peer *addr; + int64_t spaceused=0,estsize = 0; struct iguana_bundle *bp,*lastpending = 0,*firstgap = 0; double *sortbuf; struct iguana_peer *addr; dispflag = (rand() % 1000) == 0; numrecv = numhashes = numcached = numsaved = numemit = done = 0; count = coin->bundlescount; @@ -474,7 +474,8 @@ void iguana_bundlestats(struct iguana_info *coin,char *str) { if ( firstgap == 0 ) firstgap = lastpending = bp; - else if ( ++pending == coin->MAXBUNDLES ) + spaceused += bp->datasize; + if ( lastpending == 0 && spaceused > coin->MAXMEM ) lastpending = bp; sortbuf[m*2] = bp->metric; sortbuf[m*2 + 1] = i; @@ -511,7 +512,9 @@ void iguana_bundlestats(struct iguana_info *coin,char *str) if ( lastpending != 0 ) coin->lastpending = lastpending; coin->numsaved = numsaved; - sprintf(str,"%d 1st.%d-%d N[%d] Q.%d h.%d r.%d c.%d:%d:%d s.%d d.%d E.%d:%d M.%d L.%d est.%d %s %d:%02d:%02d %03.3f peers.%d/%d Q.(%d %d)",firstgap!=0?firstgap->numsaved:0,firstgap!=0?firstgap->hdrsi:0,lastpending!=0?lastpending->hdrsi:0,count,coin->numbundlesQ,numhashes,coin->blocksrecv,coin->numcached,numcached,coin->cachefreed,numsaved,done,numemit,coin->numreqsent,coin->blocks.hwmchain.height,coin->longestchain,coin->MAXBUNDLES,mbstr(str2,estsize),(int32_t)difft.x/3600,(int32_t)(difft.x/60)%60,(int32_t)difft.x%60,difft.millis,p,coin->MAXPEERS,queue_size(&coin->priorityQ),queue_size(&coin->blocksQ)); + coin->spaceused = spaceused; + char str4[65]; + sprintf(str,"%d 1st.%d-%d N[%d] Q.%d h.%d r.%d c.%s s.%d d.%d E.%d:%d M.%d L.%d est.%d %s %d:%02d:%02d %03.3f peers.%d/%d Q.(%d %d)",firstgap!=0?firstgap->numsaved:0,firstgap!=0?firstgap->hdrsi:0,lastpending!=0?lastpending->hdrsi:0,count,coin->numbundlesQ,numhashes,coin->blocksrecv,mbstr(str4,spaceused),numsaved,done,numemit,coin->numreqsent,coin->blocks.hwmchain.height,coin->longestchain,coin->MAXBUNDLES,mbstr(str2,estsize),(int32_t)difft.x/3600,(int32_t)(difft.x/60)%60,(int32_t)difft.x%60,difft.millis,p,coin->MAXPEERS,queue_size(&coin->priorityQ),queue_size(&coin->blocksQ)); //sprintf(str+strlen(str),"%s.%-2d %s time %.2f files.%d Q.%d %d\n",coin->symbol,flag,str,(double)(time(NULL)-coin->starttime)/60.,coin->peers.numfiles,queue_size(&coin->priorityQ),queue_size(&coin->blocksQ)); if ( time(NULL) > lastdisp+10 ) { diff --git a/iguana/iguana_recv.c b/iguana/iguana_recv.c index a2e01a3f1..b90b29c53 100755 --- a/iguana/iguana_recv.c +++ b/iguana/iguana_recv.c @@ -425,7 +425,7 @@ int32_t iguana_bundlekick(struct iguana_info *coin,struct iguana_bundle *bp,int3 { if ( block->fpipbits == 0 )//|| block->RO.recvlen == 0 ) { - if ( block->issued == 0 || now > block->issued+60 ) + if ( bp->numsaved > bp->n*.95 || block->issued == 0 || now > block->issued+60 ) { block->numrequests++; if ( bp->hdrsi == starti )