From d35840a2111beafe018851314a624e268e3cde6a Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 30 Sep 2019 14:28:20 +0200 Subject: [PATCH] uitest: make child soffice process die when parent dies using PR_SET_PDEATHSIG. Note that this can only be called by the child process in question, so we have to pass a new command line argument down to activate it. And we have to plumb it through the wrapper oosplash process. I wonder where else our testing infrastructure could benefit from this Change-Id: I55e8e9f7f4e6cc415046df04c804e51475b8a4c9 Reviewed-on: https://gerrit.libreoffice.org/79854 Tested-by: Jenkins Reviewed-by: Noel Grandin --- desktop/source/app/cmdlineargs.cxx | 14 ++++++++++++++ desktop/source/app/cmdlinehelp.cxx | 3 ++- desktop/unx/source/args.c | 13 +++++++++++++ uitest/libreoffice/connection.py | 2 +- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx index 381147cd534e..46395ae87133 100644 --- a/desktop/source/app/cmdlineargs.cxx +++ b/desktop/source/app/cmdlineargs.cxx @@ -42,6 +42,11 @@ #include #include +#ifdef LINUX +#include +#include +#endif + using namespace com::sun::star::lang; using namespace com::sun::star::uri; using namespace com::sun::star::uno; @@ -362,6 +367,15 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier ) { // Do nothing, accept only for backward compatibility } + else if ( oArg == "dont-survive-parent" ) + { +// only supported on linux for now +#ifdef LINUX + prctl(PR_SET_PDEATHSIG, SIGKILL); +#else + fprintf(stderr, "Warning: dont-survive-parent is not supported on this platform (yet).\n"); +#endif + } else if ( oArg == "nologo" ) { m_nologo = true; diff --git a/desktop/source/app/cmdlinehelp.cxx b/desktop/source/app/cmdlinehelp.cxx index bdb04bb9d4d8..b6afe63fe57a 100644 --- a/desktop/source/app/cmdlinehelp.cxx +++ b/desktop/source/app/cmdlinehelp.cxx @@ -112,7 +112,8 @@ namespace desktop "Developer arguments: \n" " --terminate_after_init \n" " Exit after initialization complete (no documents loaded)\n" - " --eventtesting Exit after loading documents. \n\n" + " --eventtesting Exit after loading documents. \n" + " --dont-survive-parent Exit when the parent exits (linux only) \n\n" "New document creation arguments: \n" "The arguments create an empty document of specified kind. Only one of them may \n" "be used in one command line. If filenames are specified after an argument, \n" diff --git a/desktop/unx/source/args.c b/desktop/unx/source/args.c index 199b58a8e50e..81a8dbca4bb5 100644 --- a/desktop/unx/source/args.c +++ b/desktop/unx/source/args.c @@ -9,6 +9,10 @@ #include #include #include +#ifdef LINUX +#include +#include +#endif #include "args.h" @@ -121,6 +125,15 @@ Args *args_parse (void) args->pPageinType = pArgDescr[j].pPageinType; break; } + if (rtl_ustr_ascii_compare_WithLength( + arg, length, "dont-survive-parent") + == 0) + { +#ifdef LINUX + prctl(PR_SET_PDEATHSIG, SIGKILL); +#endif + break; + } } } diff --git a/uitest/libreoffice/connection.py b/uitest/libreoffice/connection.py index 50fdda33fd34..9e145c98a686 100644 --- a/uitest/libreoffice/connection.py +++ b/uitest/libreoffice/connection.py @@ -66,7 +66,7 @@ class OfficeConnection: argv = [soffice, "--accept=" + socket + ";urp", "-env:UserInstallation=" + userdir, "--quickstart=no", "--nofirststartwizard", - "--norestore", "--nologo"] + "--norestore", "--nologo", "--dont-survive-parent"] if "--valgrind" in self.args: argv.append("--valgrind")