diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2024-01-05 07:10:58 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2024-01-05 07:10:58 +0000 |
commit | 8b19c4f273613b0477b13d6579e59396084671fc (patch) | |
tree | 1e070b1ecd6b2aab6aef82d80c13f32fc6721310 | |
parent | e80c7eb50b65ff7bc864fe551c24ac26c15f3e8d (diff) |
9nfs: fix rfork() race with shared pid variable
-rw-r--r-- | sys/src/cmd/9nfs/chat.c | 7 |
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; } |