aboutsummaryrefslogtreecommitdiff
path: root/btsd.c
diff options
context:
space:
mode:
authorAmavect <amavect@gmail.com>2023-09-07 02:38:36 +0000
committerrodri <rgl@antares-labs.eu>2023-09-07 02:38:36 +0000
commite29fc9d0f23c62085114cb479032e07b0fb29abb (patch)
tree2244c0208dd48d98f30eb68f85ac7e148e212167 /btsd.c
parent2723bb6ff3e339f7f56a6276fa1c7c9f28d63871 (diff)
downloadbattleship-e29fc9d0f23c62085114cb479032e07b0fb29abb.tar.gz
battleship-e29fc9d0f23c62085114cb479032e07b0fb29abb.tar.bz2
battleship-e29fc9d0f23c62085114cb479032e07b0fb29abb.zip
inline spawned threads to threadmain.
Pointers to automatic variables become invalid when threadmain exits. Solution is to reuse threadmain. Use nbsend to avoid deadlock to the draw channel. Input struct is no longer needed, inline it.
Diffstat (limited to 'btsd.c')
-rw-r--r--btsd.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/btsd.c b/btsd.c
index 5a722d2..861add4 100644
--- a/btsd.c
+++ b/btsd.c
@@ -299,14 +299,12 @@ matchmaker(void *)
}
void
-listenthread(void *arg)
+listenthread(char *addr)
{
- char *addr, adir[40], ldir[40], aux[128], *s;
+ char adir[40], ldir[40], aux[128], *s;
int acfd, lcfd, dfd, sfd;
Player *p;
- addr = arg;
-
acfd = announce(addr, adir);
if(acfd < 0)
sysfatal("announce: %r");
@@ -357,12 +355,12 @@ threadmain(int argc, char *argv[])
case 'a':
addr = EARGF(usage());
break;
+ default: usage();
}ARGEND
if(argc != 0)
usage();
proccreate(matchmaker, nil, mainstacksize);
proccreate(reaper, nil, mainstacksize);
- threadcreate(listenthread, addr, mainstacksize);
- yield();
+ listenthread(addr);
}