Richard W.M. Jones
2023-Apr-18 07:25 UTC
[Libguestfs] [PATCH nbdkit] server: Fix exit with parent behaviour if flag is not specified
Commit 6b03ec8ad6 ("common: Move exit-with-parent code from include/ to utils/") was supposed to be a largely neutral refactoring of the --exit-with-parent flag. However I made a mistake in one hunk of that patch: -#ifdef HAVE_EXIT_WITH_PARENT - if (exit_with_parent) { - if (set_exit_with_parent () == -1) { - perror ("nbdkit: --exit-with-parent"); - exit (EXIT_FAILURE); - } + if (set_exit_with_parent () == -1) { + perror ("nbdkit: --exit-with-parent"); + exit (EXIT_FAILURE); } -#endif by removing the test for exit_with_parent. The effect is similar to if we always specified --exit-with-parent when nbdkit is running in the foreground. Somewhat surprisingly this didn't have any noticable effect. That's for a few of reasons: (1) Mostly if you don't fork then you should be using --exit-with-parent (and the bulk of the tests do this). (2) If we do fork into the background then the PR_SET_PDEATHSIG flag is cleared by Linux across the fork. (3) It actually _did_ break Windows because there set_exit_with_parent calls abort, but for unrelated reasons our Windows CI was broken (and never tested running nbdkit.exe). Fix this with the obvious adjustment. This broke nbdkit 1.32 and 1.34. Fixes: commit 6b03ec8ad672e5956b41cbacae9c307e5acd786b --- server/main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/main.c b/server/main.c index c3b9bf384..1df5d69ac 100644 --- a/server/main.c +++ b/server/main.c @@ -574,9 +574,11 @@ main (int argc, char *argv[]) /* Implement --exit-with-parent early in case plugin initialization * takes a long time and the parent exits during that time. */ - if (set_exit_with_parent () == -1) { - perror ("nbdkit: --exit-with-parent"); - exit (EXIT_FAILURE); + if (exit_with_parent) { + if (set_exit_with_parent () == -1) { + perror ("nbdkit: --exit-with-parent"); + exit (EXIT_FAILURE); + } } /* If the user has mixed up -p/--run/-s/-U/--vsock options, then -- 2.39.2
Laszlo Ersek
2023-Apr-18 10:00 UTC
[Libguestfs] [PATCH nbdkit] server: Fix exit with parent behaviour if flag is not specified
On 4/18/23 09:25, Richard W.M. Jones wrote:> Commit 6b03ec8ad6 ("common: Move exit-with-parent code from include/ > to utils/") was supposed to be a largely neutral refactoring of the > --exit-with-parent flag. However I made a mistake in one hunk of that > patch: > > -#ifdef HAVE_EXIT_WITH_PARENT > - if (exit_with_parent) { > - if (set_exit_with_parent () == -1) { > - perror ("nbdkit: --exit-with-parent"); > - exit (EXIT_FAILURE); > - } > + if (set_exit_with_parent () == -1) { > + perror ("nbdkit: --exit-with-parent"); > + exit (EXIT_FAILURE); > } > -#endif > > by removing the test for exit_with_parent. The effect is similar to > if we always specified --exit-with-parent when nbdkit is running in > the foreground. > > Somewhat surprisingly this didn't have any noticable effect. That's > for a few of reasons: (1) Mostly if you don't fork then you should be > using --exit-with-parent (and the bulk of the tests do this). (2) If > we do fork into the background then the PR_SET_PDEATHSIG flag is > cleared by Linux across the fork. (3) It actually _did_ break Windows > because there set_exit_with_parent calls abort, but for unrelated > reasons our Windows CI was broken (and never tested running > nbdkit.exe). > > Fix this with the obvious adjustment. > > This broke nbdkit 1.32 and 1.34. > > Fixes: commit 6b03ec8ad672e5956b41cbacae9c307e5acd786b > --- > server/main.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/server/main.c b/server/main.c > index c3b9bf384..1df5d69ac 100644 > --- a/server/main.c > +++ b/server/main.c > @@ -574,9 +574,11 @@ main (int argc, char *argv[]) > /* Implement --exit-with-parent early in case plugin initialization > * takes a long time and the parent exits during that time. > */ > - if (set_exit_with_parent () == -1) { > - perror ("nbdkit: --exit-with-parent"); > - exit (EXIT_FAILURE); > + if (exit_with_parent) { > + if (set_exit_with_parent () == -1) { > + perror ("nbdkit: --exit-with-parent"); > + exit (EXIT_FAILURE); > + } > } > > /* If the user has mixed up -p/--run/-s/-U/--vsock options, thenReviewed-by: Laszlo Ersek <lersek at redhat.com>