ip/torrent: simplify

This commit is contained in:
cinap_lenrek 2012-05-06 18:00:15 +02:00
parent 3997c57b57
commit 326c8d9c42

View file

@ -627,7 +627,7 @@ server(void)
void void
client(char *ip, char *port) client(char *ip, char *port)
{ {
static Dict *peers, *peerqh, *peerqt; static Dict *peerqh, *peerqt;
static QLock peerslk; static QLock peerslk;
static int nprocs; static int nprocs;
char *addr; char *addr;
@ -640,7 +640,7 @@ client(char *ip, char *port)
d = mallocz(sizeof(*d) + 64, 1); d = mallocz(sizeof(*d) + 64, 1);
snprint(addr = d->str, 64, "tcp!%s!%s", ip, port); snprint(addr = d->str, 64, "tcp!%s!%s", ip, port);
qlock(&peerslk); qlock(&peerslk);
if(dlook(peers, addr) || dlook(peerqh, addr)){ if(dlook(peerqh, addr)){
qunlock(&peerslk); qunlock(&peerslk);
free(d); free(d);
return; return;
@ -661,31 +661,18 @@ client(char *ip, char *port)
if(rfork(RFFDG|RFPROC|RFMEM|RFNOWAIT)) if(rfork(RFFDG|RFPROC|RFMEM|RFNOWAIT))
return; return;
d = nil;
for(;;){ for(;;){
qlock(&peerslk); qlock(&peerslk);
if(d){ /* dequeue and put to tail */
Dict **dd;
/* remove from peers list */
for(dd = &peers; *dd; dd = &((*dd)->next))
if(*dd == d){
*dd = d->next;
break;
}
/* enqueue to back */
d->next = nil;
if(peerqt == nil)
peerqh = d;
else
peerqt->next = d;
peerqt = d;
}
/* dequeue and put in peer list */
if(d = peerqh){ if(d = peerqh){
if((peerqh = d->next) == nil) if((peerqh = d->next) == nil)
peerqt = nil; peerqt = nil;
d->next = peers; d->next = nil;
peers = d; if(peerqt)
peerqt->next = d;
else
peerqh = d;
peerqt = d;
} else } else
nprocs--; nprocs--;
qunlock(&peerslk); qunlock(&peerslk);
@ -694,11 +681,10 @@ client(char *ip, char *port)
addr = d->str; addr = d->str;
if(debug) fprint(2, "client %s\n", addr); if(debug) fprint(2, "client %s\n", addr);
if((fd = dial(addr, nil, nil, nil)) >= 0){ if((fd = dial(addr, nil, nil, nil)) >= 0){
if(!peer(fd, 0, addr)) peer(fd, 0, addr);
d = nil;
close(fd); close(fd);
} }
if(d) sleep(1000+nrand(5000)); sleep(1000+nrand(5000));
} }
} }