chiark / gitweb /
prefork-interp: properly unlock lock in setup child
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Aug 2022 10:37:07 +0000 (11:37 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Aug 2022 20:21:10 +0000 (21:21 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
cprogs/prefork-interp.c

index fb45ca009aff6c8944769422a140071f2b44435e..d87e8f82c87950ec6484a6a6816dd96a94c7ab3f 100644 (file)
@@ -697,8 +697,9 @@ void become_watcher(void) {
 }
 
 static __attribute__((noreturn))
 }
 
 static __attribute__((noreturn))
-void become_setup(int sfd, int fake_pair[2],
+void become_setup(int sfd, int lockfd, int fake_pair[2],
                  int watcher_stdin, int watcher_stderr) {
                  int watcher_stdin, int watcher_stderr) {
+  close(lockfd);
   close(fake_pair[0]);
   int call_fd = fake_pair[1];
 
   close(fake_pair[0]);
   int call_fd = fake_pair[1];
 
@@ -792,7 +793,7 @@ static void connect_or_spawn(void) {
 
   pid_t setup_pid = fork();
   if (setup_pid == (pid_t)-1) diee("fork for spawn setup");
 
   pid_t setup_pid = fork();
   if (setup_pid == (pid_t)-1) diee("fork for spawn setup");
-  if (!setup_pid) become_setup(sfd, fake_pair,
+  if (!setup_pid) become_setup(sfd, lockfd, fake_pair,
                               watcher_stdin[1], watcher_stderr[0]);
   close(fake_pair[1]);
   close(sfd);
                               watcher_stdin[1], watcher_stderr[0]);
   close(fake_pair[1]);
   close(sfd);