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 <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2019-09-30 14:28:20 +02:00
parent 11a1e514db
commit d35840a211
4 changed files with 30 additions and 2 deletions

View File

@@ -42,6 +42,11 @@
#include <osl/file.hxx>
#include <sal/log.hxx>
#ifdef LINUX
#include <sys/prctl.h>
#include <signal.h>
#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;

View File

@@ -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"

View File

@@ -9,6 +9,10 @@
#include <stdlib.h>
#include <string.h>
#include <osl/process.h>
#ifdef LINUX
#include <sys/prctl.h>
#include <signal.h>
#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;
}
}
}

View File

@@ -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")