Browse Source

better exit handling

release/v0.1
jl777 9 years ago
parent
commit
e7db944b42
  1. 6
      iguana/iguana777.c
  2. 2
      iguana/iguana_bitmap.c
  3. 2
      iguana/iguana_blocks.c
  4. 2
      iguana/iguana_exchanges.c
  5. 2
      iguana/iguana_mofn.c
  6. 8
      iguana/iguana_peers.c
  7. 16
      iguana/iguana_ramchain.c
  8. 15
      iguana/iguana_spendvectors.c
  9. 4
      iguana/iguana_volatiles.c
  10. 18
      iguana/main.c
  11. 4
      includes/iguana_funcs.h

6
iguana/iguana777.c

@ -403,7 +403,7 @@ int32_t iguana_helperA(struct supernet_info *myinfo,struct iguana_info *coin,int
else
{
printf("error validating.[%d], restart iguana\n",bp->hdrsi);
iguana_exit(myinfo);
iguana_exit(myinfo,bp);
}
return(num);
}
@ -569,7 +569,7 @@ int32_t iguana_utxogen(struct supernet_info *myinfo,struct iguana_info *coin,int
if ( iguana_utxoaddr_gen(myinfo,coin,(coin->bundlescount - 1) * coin->chain->bundlesize) == 0 )
{
printf("restart iguana: fatal error generating ledger file for %s\n",coin->symbol);
iguana_exit(myinfo);
iguana_exit(myinfo,0);
}
}
}
@ -802,7 +802,7 @@ void iguana_coinloop(void *arg)
if ( coin->peers == 0 )
{
printf("FATAL lack of peers struct\n");
iguana_exit(myinfo);
iguana_exit(myinfo,0);
}
if ( coin->virtualchain == 0 )
{

2
iguana/iguana_bitmap.c

@ -126,7 +126,7 @@ void gen_jpegfile(char *fname,int32_t quality,uint8_t *bitmap,int32_t width,int3
if ( (outfile= fopen(fname,"wb")) == NULL)
{
fprintf(stderr, "can't open %s\n", fname);
iguana_exit(0);
iguana_exit(0,0);
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = width; /* image width and height, in pixels */

2
iguana/iguana_blocks.c

@ -150,7 +150,7 @@ void _iguana_blocklink(struct iguana_info *coin,struct iguana_block *prev,struct
if ( memcmp(block->RO.prev_block.bytes,prev->RO.hash2.bytes,sizeof(bits256)) != 0 )
{
printf("illegal blocklink mismatched hashes\n");
iguana_exit(0);
iguana_exit(0,0);
return;
}
block->hh.prev = prev;

2
iguana/iguana_exchanges.c

@ -1035,7 +1035,7 @@ struct exchange_info *exchange_create(char *exchangestr,cJSON *argjson)
if ( stringbits((char *)Exchange_funcs[i]->name) == stringbits((char *)Exchange_funcs[j]->name) )
{
printf("FIRST 8 chars of Exchange_func[].name must be unique: %d.(%s) vs %d.(%s)\n",i,Exchange_funcs[i]->name,j,Exchange_funcs[j]->name);
iguana_exit(0);
iguana_exit(0,0);
}
}
didinit = 1;

2
iguana/iguana_mofn.c

@ -656,7 +656,7 @@ bits256 iguana_schnorr_noncepair(void *ctx,bits256 *pubkey,uint8_t odd_even,bits
if ( j == maxj )
{
printf("couldnt generate even noncepair\n");
iguana_exit(0);
iguana_exit(0,0);
}
return(privnonce);
}

8
iguana/iguana_peers.c

@ -90,7 +90,7 @@ struct iguana_iAddr *_iguana_hashset(struct iguana_info *coin,uint32_t ipbits,in
if ( ptr == 0 )
{
printf("fatal alloc errorA in hashset\n");
iguana_exit(0);
iguana_exit(0,0);
}
//printf("ptr.%p allocsize.%d key.%p keylen.%d itemind.%d\n",ptr,allocsize,key,keylen,itemind);
ptr->hh.itemind = itemind;
@ -117,7 +117,7 @@ struct iguana_iAddr *iguana_iAddrhashset(struct iguana_info *coin,struct iguana_
if ( iA == 0 || iA->ipbits == 0 )
{
printf("null iA.%p or ipbits.%llx ind.%d status.%d\n",iA,iA!=0?(long long)iA->ipbits:0,iA!=0?iA->hh.itemind:0,iA!=0?iA->status:0);
iguana_exit(0);
iguana_exit(0,0);
return(0);
}
portable_mutex_lock(&coin->peers_mutex);
@ -194,7 +194,7 @@ uint32_t iguana_rwiAddrind(struct iguana_info *coin,int32_t rwflag,struct iguana
if ( ptr == 0 )
{
printf("fatal alloc errorB in hashset\n");
iguana_exit(0);
iguana_exit(0,0);
}
ptr->hh.itemind = m;
ptr->ipbits = tmp.ipbits;
@ -528,7 +528,7 @@ int32_t iguana_queue_send(struct iguana_peer *addr,int32_t delay,uint8_t *serial
if ( addr == 0 )
{
printf("iguana_queue_send null addr\n");
iguana_exit(0);
iguana_exit(0,0);
return(-1);
}
if ( (datalen= iguana_sethdr((void *)serialized,addr->netmagic,cmd,&serialized[sizeof(struct iguana_msghdr)],len)) < 0 )

16
iguana/iguana_ramchain.c

@ -54,7 +54,7 @@ struct iguana_kvitem *iguana_hashsetPT(struct iguana_ramchain *ramchain,int32_t
if ( ptr == 0 )
{
printf("fatal alloc errorC in hashset\n");
iguana_exit(0);
iguana_exit(0,0);
}
if ( 0 && ramchain->expanded && selector == 'T' )
printf("hashmem.%p selector.%c added.(%s) itemind.%x ptr.%p\n",ramchain->hashmem,selector,str,itemind,ptr);
@ -69,7 +69,7 @@ struct iguana_kvitem *iguana_hashsetPT(struct iguana_ramchain *ramchain,int32_t
if ( itemind == 0 )
{
printf("negative itemind\n");
iguana_exit(0);
iguana_exit(0,0);
}
if ( 0 )
{
@ -79,7 +79,7 @@ struct iguana_kvitem *iguana_hashsetPT(struct iguana_ramchain *ramchain,int32_t
if ( tmp != ptr )
{
printf("(%s) hashmem.%p selector.%c %s search error %p != %p itemind.%x\n",str,ramchain->hashmem,selector,str,ptr,tmp,itemind);
iguana_exit(0);
iguana_exit(0,0);
}
}
}
@ -233,7 +233,7 @@ uint32_t iguana_ramchain_addpkhash(struct iguana_info *coin,RAMCHAIN_FUNC,uint8_
if ( P[pkind].pkind != pkind ) //unspentind != 0 && (P[pkind].firstunspentind != unspentind ||
{
printf("iguana_ramchain_addpkhash error mismatched pkind.(%x %x) unspentind.%d\n",pkind,P[pkind].pkind,unspentind);
iguana_exit(0);
iguana_exit(0,0);
return(0);
}
if ( memcmp(P[pkind].rmd160,rmd160,sizeof(P[pkind].rmd160)) != 0 )
@ -396,7 +396,7 @@ uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint6
if ( u->fileid != fileid || u->scriptpos != fpos || u->scriptlen != scriptlen || u->value != value || u->pkind != pkind || u->value != value || u->txidind != ramchain->H.txidind || (pkind != 0 && u->prevunspentind != A[pkind].lastunspentind) || u->vout != vout || u->hdrsi != hdrsi )
{
printf("iguana_ramchain_addunspent: (%d %d %d) vs (%d %d %d) mismatched values.(%d %.8f %d %d %d %d) vs (%d %.8f %d %d %d %d)\n",u->fileid,u->scriptpos,u->scriptlen,fileid,fpos,scriptlen,u->pkind,dstr(u->value),u->txidind,u->prevunspentind,u->vout,u->hdrsi,pkind,dstr(value),ramchain->H.txidind,A[pkind].lastunspentind,vout,hdrsi);
iguana_exit(0);
iguana_exit(0,0);
return(0);
}
}
@ -495,7 +495,7 @@ uint32_t iguana_ramchain_addspend(struct iguana_info *coin,RAMCHAIN_FUNC,bits256
else
{
printf("addspend illegal txidind.%d vs %d\n",txidind,rdata->numtxids);
iguana_exit(0);
iguana_exit(0,0);
}
}
if ( ramchain->H.ROflag != 0 )
@ -998,7 +998,7 @@ int64_t iguana_ramchain_init(char *fname,struct iguana_ramchain *ramchain,struct
if ( rdata->allocsize != iguana_ramchain_size(fname,RAMCHAIN_ARG,numblocks,scriptspace,zcash) )
{
printf("offset.%ld scriptspace.%d allocsize.%ld vs memsize.%ld\n",(long)offset,scriptspace,(long)rdata->allocsize,(long)iguana_ramchain_size(fname,RAMCHAIN_ARG,numblocks,scriptspace,zcash));
iguana_exit(0);
iguana_exit(0,0);
}
if ( offset <= mem->totalsize )
iguana_memreset(mem);
@ -1014,7 +1014,7 @@ int64_t iguana_ramchain_init(char *fname,struct iguana_ramchain *ramchain,struct
if ( rdata->allocsize > mem->totalsize )
{
printf("init.(%d %d %d %d %d) rdata->allocsize.%ld mem->totalsize.%ld hashmemsize.%ld\n",numtxids,numunspents,numspends,numpkinds,numexternaltxids,(long)rdata->allocsize,mem->totalsize,hashmem!=0?hashmem->totalsize:0);
iguana_exit(0);
iguana_exit(0,0);
}
return(offset);
}

15
iguana/iguana_spendvectors.c

@ -155,7 +155,7 @@ struct iguana_bundle *iguana_externalspent(struct supernet_info *myinfo,struct i
else
{
printf("illegal hdrsi.%d prev_hash.(%s) for bp.[%d]\n",hdrsi,bits256_str(str,prev_hash),spent_hdrsi);
iguana_exit(myinfo);
iguana_exit(myinfo,0);
return(0);
}
}
@ -164,8 +164,8 @@ struct iguana_bundle *iguana_externalspent(struct supernet_info *myinfo,struct i
printf("cant find prev_hash.(%s) for bp.[%d]\n",bits256_str(str,prev_hash),spent_hdrsi);
if ( spent_hdrsi < coin->current->hdrsi )
{
iguana_bundleremove(coin,spent_hdrsi,1);
iguana_exit(myinfo);
//iguana_bundleremove(coin,spent_hdrsi,1);
iguana_exit(myinfo,coin->bundles[spent_hdrsi]);
}
coin->RTdatabad = 1;
return(0);
@ -177,8 +177,8 @@ struct iguana_bundle *iguana_externalspent(struct supernet_info *myinfo,struct i
else if ( unspentind == 0 || unspentind >= spentbp->ramchain.H.data->numunspents )
printf("%s illegal unspentind.%d vs max.%d spentbp.%p[%d]\n",coin->symbol,unspentind,spentbp->ramchain.H.data->numunspents,spentbp,hdrsi);
else return(spentbp);
iguana_bundleremove(coin,spent_hdrsi,1);
iguana_exit(myinfo);
//iguana_bundleremove(coin,spent_hdrsi,1);
iguana_exit(myinfo,coin->bundles[spent_hdrsi]);
}
//exit(-1);
return(0);
@ -957,7 +957,7 @@ int32_t iguana_balanceflush(struct supernet_info *myinfo,struct iguana_info *coi
}
}
#endif
iguana_exit(myinfo);
iguana_exit(myinfo,0);
}
coin->balanceswritten = iguana_volatilesinit(myinfo,coin);
//printf("flush free\n");
@ -1159,7 +1159,8 @@ int32_t iguana_bundlevalidate(struct supernet_info *myinfo,struct iguana_info *c
if ( errs != 0 )
{
printf("%s remove.[%d]\n",coin->symbol,bp->hdrsi);
iguana_bundleremove(coin,bp->hdrsi,0);
//iguana_bundleremove(coin,bp->hdrsi,0);
return(-errs);
}
return(bp->n - errs);
}

4
iguana/iguana_volatiles.c

@ -315,7 +315,7 @@ int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struc
{
//double startmillis = OS_milliseconds(); static double totalmillis; static int32_t utxon;
printf("hhutxo deprecated\n");
iguana_exit(0);
iguana_exit(0,0);
}
//portable_mutex_unlock(&coin->RTmutex);
printf("end iguana_volatileupdate.%d: [%d] spent.(u%u %.8f pkind.%d) double spend? at ht.%d [%d] spendind.%d (%p %p)\n",incremental,spent_hdrsi,spent_unspentind,dstr(spent_value),spent_pkind,fromheight,fromheight/coin->chain->bundlesize,spendind,spentchain->Uextras,spentchain->A2);
@ -336,7 +336,7 @@ int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struc
bp->ramchain.H.data = 0;
}
portable_mutex_unlock(&coin->special_mutex);
iguana_exit(0);
iguana_exit(0,0);
}
}
else if ( coin->spendvectorsaved > 1 )

18
iguana/main.c

@ -332,7 +332,7 @@ char *SuperNET_JSON(struct supernet_info *myinfo,struct iguana_info *coin,cJSON
return(retstr);
}
void iguana_exit(struct supernet_info *myinfo)
void iguana_exit(struct supernet_info *myinfo,struct iguana_bundle *bp)
{
int32_t i,j,iter; struct iguana_info *coin,*tmp;
if ( myinfo == 0 )
@ -365,6 +365,8 @@ void iguana_exit(struct supernet_info *myinfo)
sleep(3);
}
printf("sockets closed\n");
if ( bp != 0 )
iguana_bundleremove(bp->coin,bp->hdrsi,1);
for (i=0; i<10; i++)
{
printf("need to exit, please restart after shutdown in %d seconds, or just ctrl-C\n",10-i);
@ -375,12 +377,12 @@ void iguana_exit(struct supernet_info *myinfo)
#ifndef _WIN32
#include <signal.h>
void sigint_func() { printf("\nSIGINT\n"); iguana_exit(0); }
void sigillegal_func() { printf("\nSIGILL\n"); iguana_exit(0); }
void sighangup_func() { printf("\nSIGHUP\n"); iguana_exit(0); }
void sigkill_func() { printf("\nSIGKILL\n"); iguana_exit(0); }
void sigabort_func() { printf("\nSIGABRT\n"); iguana_exit(0); }
void sigquit_func() { printf("\nSIGQUIT\n"); iguana_exit(0); }
void sigint_func() { printf("\nSIGINT\n"); iguana_exit(0,0); }
void sigillegal_func() { printf("\nSIGILL\n"); iguana_exit(0,0); }
void sighangup_func() { printf("\nSIGHUP\n"); iguana_exit(0,0); }
void sigkill_func() { printf("\nSIGKILL\n"); iguana_exit(0,0); }
void sigabort_func() { printf("\nSIGABRT\n"); iguana_exit(0,0); }
void sigquit_func() { printf("\nSIGQUIT\n"); iguana_exit(0,0); }
void sigchild_func() { printf("\nSIGCHLD\n"); signal(SIGCHLD,sigchild_func); }
void sigalarm_func() { printf("\nSIGALRM\n"); signal(SIGALRM,sigalarm_func); }
void sigcontinue_func() { printf("\nSIGCONT\n"); signal(SIGCONT,sigcontinue_func); }
@ -1165,7 +1167,7 @@ ZERO_ARGS(SuperNET,stop)
{
if ( remoteaddr == 0 || strncmp(remoteaddr,"127.0.0.1",strlen("127.0.0.1")) == 0 )
{
iguana_exit(myinfo);
iguana_exit(myinfo,0);
return(clonestr("{\"result\":\"exit started\"}"));
} else return(clonestr("{\"error\":\"cant do a remote stop of this node\"}"));
}

4
includes/iguana_funcs.h

@ -187,7 +187,7 @@ int32_t iguana_rpctest(struct iguana_info *coin);
extern queue_t helperQ;
extern const char *Hardcoded_coins[][3];
void iguana_main(void *arg);
void iguana_exit(struct supernet_info *myinfo);
void iguana_exit(struct supernet_info *myinfo,struct iguana_bundle *bp);
int32_t iguana_peerfname(struct iguana_info *coin,int32_t *hdrsip,char *dirname,char *fname,uint32_t ipbits,bits256 hash2,bits256 prevhash2,int32_t numblocks,int32_t dispflag);
struct iguana_txblock *iguana_peertxdata(struct iguana_info *coin,int32_t *bundleip,char *fname,struct OS_memspace *mem,uint32_t ipbits,bits256 hash2);
@ -273,7 +273,7 @@ cJSON *iguana_pubkeyjson(struct iguana_info *coin,char *pubkeystr);
void iguana_bundleQ(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,int32_t timelimit);
int32_t iguana_bundleiters(struct supernet_info *myinfo,struct iguana_info *coin,struct OS_memspace *mem,struct OS_memspace *memB,struct iguana_bundle *bp,int32_t timelimit,int32_t lag);
void ramcoder_test(void *data,int64_t len);
void iguana_exit();
void iguana_exit(struct supernet_info *myinfo,struct iguana_bundle *bp);
int32_t iguana_pendingaccept(struct iguana_info *coin);
char *iguana_blockingjsonstr(struct supernet_info *myinfo,struct iguana_info *coin,char *jsonstr,uint64_t tag,int32_t maxmillis,char *remoteaddr,uint16_t port);
void iguana_iAkill(struct iguana_info *coin,struct iguana_peer *addr,int32_t markflag);

Loading…
Cancel
Save