summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2024-01-05 07:10:58 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2024-01-05 07:10:58 +0000
commit8b19c4f273613b0477b13d6579e59396084671fc (patch)
tree1e070b1ecd6b2aab6aef82d80c13f32fc6721310
parente80c7eb50b65ff7bc864fe551c24ac26c15f3e8d (diff)
9nfs: fix rfork() race with shared pid variable
-rw-r--r--sys/src/cmd/9nfs/chat.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/src/cmd/9nfs/chat.c b/sys/src/cmd/9nfs/chat.c
index 79b5315b1..29fad7a26 100644
--- a/sys/src/cmd/9nfs/chat.c
+++ b/sys/src/cmd/9nfs/chat.c
@@ -26,7 +26,7 @@ killchat(void)
void
chatsrv(char *name)
{
- int n, sfd, pfd[2];
+ int n, sfd, pid, pfd[2];
char *p, buf[256];
if(name && *name)
@@ -44,13 +44,14 @@ chatsrv(char *name)
sfd = create(nbuf, OWRITE, 0600);
if(sfd < 0)
panic("chatsrv create %s", nbuf);
- chatpid = rfork(RFPROC|RFMEM);
- switch(chatpid){
+ pid = rfork(RFPROC|RFMEM);
+ switch(pid){
case -1:
panic("chatsrv fork");
case 0:
break;
default:
+ chatpid = pid;
atexit(killchat);
return;
}