ref: 8a90e889299f6e982e278cf13f3095774466a25c
parent: ecf1f426f1fa3bf6341c863b7a3ffda734c835c4
author: Jacob Moody <moody@posixcafe.org>
date: Tue Jan 9 14:59:34 EST 2024
ip/torrent: only register note handler in one proc Before the note handler would be set on all procs which would cause all threads to try and kill all other threads on exit. This also adds some procsetname() calls which makes it easier to see exactly what is going on in something like pstree(1).
--- a/sys/src/cmd/ip/torrent.c
+++ b/sys/src/cmd/ip/torrent.c
@@ -391,6 +391,7 @@
int workpiece, workoffset;
int i, o, l, x, n;
+ procsetname("peer %s: %s", addr, incoming ? "incoming" : "outgoing");
if(debug) fprint(2, "peer %s: %s connected\n", addr, incoming ? "incoming" : "outgoing");
for(i=0; i<2; i++){
@@ -617,6 +618,8 @@
}
if(rfork(RFFDG|RFPROC|RFMEM))
return;
+
+ procsetname("server");
for(;;){
if((lfd = listen(adir, ldir)) < 0){
fprint(2, "listen: %r");
@@ -699,6 +702,7 @@
if(d == nil)
exits(0);
addr = d->str;
+ procsetname("client %s", addr);
if(debug) fprint(2, "client %s\n", addr);
if((fd = dial(addr, nil, nil, nil)) >= 0){
peer(fd, 0, addr);
@@ -758,6 +762,7 @@
if(rfork(RFPROC|RFMEM))
return;
w0 = w;
+ procsetname("webseed %s %s", w->str, f->name);
Retry:
if(debug) fprint(2, "webseed %s %s\n", w->str, f->name);
s = strrchr(w->str, '/');
@@ -842,6 +847,7 @@
if(rfork(RFPROC|RFMEM))
return;
+ procsetname("webtracker %s", url);
if(debug) fprint(2, "webtracker %s\n", url);
event = "&event=started";
@@ -925,6 +931,7 @@
return;
if(rfork(RFPROC|RFMEM))
return;
+ procsetname("udptracker %s", addr);
if(debug) fprint(2, "udptracker %s\n", addr);
event = 1;
@@ -1369,7 +1376,6 @@
sysfatal("create: %r");
srand(truerand());
- atnotify(catch, 1);
switch(i = rfork(RFPROC|RFMEM|RFNOTEG)){
case -1:
sysfatal("fork: %r");
@@ -1388,6 +1394,7 @@
break;
default:
killgroup = i;
+ atnotify(catch, 1);
do {
sleep(1000);
if(pflag)
--
⑨