-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support glibc 2.35's posix_spawn_file_actions_addtcsetpgrp_np(3)
This commit implements support for the glibc 2.35 posix_spawn_file_actions_addtcsetpgrp_np(3) extension[2][3], updating spawnveg(3) to use the new function for setting the terminal group. This was done with the intention of improving performance in interactive shells without reintroducing previous race conditions[4][5]. [1]: https://sourceware.org/pipermail/libc-alpha/2022-February/136040.html [2]: https://sourceware.org/git/?p=glibc.git;a=commit;h=342cc934 [3]: https://sourceware.org/git/?p=glibc.git;a=commit;h=6289d28d [4]: #79 [5]: https://www.mail-archive.com/[email protected]/msg00717.html src/cmd/ksh93/sh/path.c: - Tell spawnveg(3) to set the terminal process group when launching a child process in an interactive shell. src/cmd/ksh93/sh/xec.c: - If posix_spawn_file_actions_addtcsetpgrp_np(3) is available, allow use of spawnveg(3) (via sh_ntfork()) even with job control active. - sh_ntfork(): Reimplement most of the SIGTSTP handling code removed in commit 66c3720. src/lib/libast/comp/spawnveg.c, src/lib/libast/misc/procopen.c, src/lib/libast/features/sys: - Add support for posix_spawn_file_actions_addtcsetpgrp_np(3). - Allow spawnveg to set the terminal process group when pgid == 0. This was necessary to avoid race conditions when using the new function. src/lib/libast/features/lib: - Detect posix_spawn_file_actions_addtcsetpgrp_np(3). - Do not detect an OS spawnveg(3). With the API changes to spawnveg in this pull request ksh probably can't use the OS's spawnveg function anymore. (That's assuming anything else even provides a spawnveg function to begin with, which is unlikely.) src/lib/libast/features/api, src/cmd/ksh93/include/defs.h: - Bump libast version (20220101 => 20220201) due to the spawnveg(3) API change. src/lib/libast/man/spawnveg.3: - Document the changes to spawnveg(3) in the corresponding man page. Currently, it will only use the new tcfd argument if posix_spawn_file_actions_addtcsetpgrp_np(3) is supported. This could also be implemented for the fork(2) fallback, but for now I've avoided changing that since actually using it in the fork code would likely require a lot of hackery to avoid attempting tcsetpgrp with vfork (the behavior of tcsetpgrp after vfork is not portable) and would only benefit systems that don't have posix_spawn and vfork (I can't recall any off the top of my head that would fall under that category). - Updated the man page to account for spawnveg's change in behavior. Co-authored-by: Martijn Dekker <[email protected]>
- Loading branch information
Showing
9 changed files
with
101 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
iff AST_API | ||
|
||
ver ast 20220101 | ||
ver ast 20220201 | ||
|
||
api ast 20120528 regexec regnexec regrexec regsubexec strgrpmatch | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0863a8e
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ping @JohnoKing: this 1.0 branch commit is a combination of 8e9ed5b and f762a81 on the dev branch. I figured now that glibc 2.35 is released, this should see wider testing in the 93u+m 1.0.0-beta.3 release. Please let me know if you find any problems with this commit.