lockf: don't hold stdin/stdout/stderr open

None of these are essential in the lockf monitor (parent post-fork), so
close them to maintain the illusion that lockf hasn't been inserted into
the pipeline.  This ensures that the correct effects happen on other
programs in the pipeline if the locked command closes or redirects these
elsewhere.

The original patch used -s to close stdout/stderr rather than closing
them unconditionally, but it's not clear that we really care that much.
kevans dropped that part when taking the patch, patch is otherwise by
listed author.

PR:		112379
Reviewed by:	0mp, allanjude (both earlier version), kevans
Feedback from:	des
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D42713
This commit is contained in:
Alexander Melkov 2023-11-21 22:46:28 -06:00 committed by Kyle Evans
parent 35095fd23f
commit 18425c19ca

View file

@ -157,8 +157,11 @@ main(int argc, char **argv)
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGTERM, killed);
fclose(stdin);
fclose(stdout);
fclose(stderr);
if (waitpid(child, &status, 0) == -1)
err(EX_OSERR, "waitpid failed");
exit(EX_OSERR);
return (WIFEXITED(status) ? WEXITSTATUS(status) : EX_SOFTWARE);
}
@ -210,7 +213,7 @@ killed(int sig)
cleanup();
signal(sig, SIG_DFL);
if (kill(getpid(), sig) == -1)
err(EX_OSERR, "kill failed");
_Exit(EX_OSERR);
}
/*