diff --git a/tests/commanddata/test4.log b/tests/commanddata/test4.log index 24a37a7e96..4fd40cc474 100644 --- a/tests/commanddata/test4.log +++ b/tests/commanddata/test4.log @@ -1,3 +1,4 @@ +ARG:--check-daemonize ENV:DISPLAY=:0.0 ENV:HOME=/home/test ENV:HOSTNAME=test diff --git a/tests/commandhelper.c b/tests/commandhelper.c index 4266e11902..b366483771 100644 --- a/tests/commandhelper.c +++ b/tests/commandhelper.c @@ -72,6 +72,8 @@ int main(int argc, char **argv) { char *buffers[3] = {NULL, NULL, NULL}; size_t buflen[3] = {0, 0, 0}; char c; + bool daemonize_check = false; + size_t daemonize_retries = 3; if (!log) return ret; @@ -83,6 +85,8 @@ int main(int argc, char **argv) { sscanf(argv[i], "%u%c", &readfds[numreadfds++], &c) != 1) { printf("Could not parse fd %s\n", argv[i]); goto cleanup; + } else if (STREQ(argv[i], "--check-daemonize")) { + daemonize_check = true; } } @@ -126,7 +130,18 @@ int main(int argc, char **argv) { fprintf(log, "FD:%zu\n", i); } - fprintf(log, "DAEMON:%s\n", getpgrp() != getppid() ? "yes" : "no"); + while (true) { + bool daemonized = getpgrp() != getppid(); + + if (daemonize_check && !daemonized && daemonize_retries-- > 0) { + usleep(100*1000); + continue; + } + + fprintf(log, "DAEMON:%s\n", daemonized ? "yes" : "no"); + break; + } + if (!(cwd = getcwd(NULL, 0))) goto cleanup; if (strlen(cwd) > strlen(".../commanddata") && diff --git a/tests/commandtest.c b/tests/commandtest.c index f0e60ee5fe..9bef825239 100644 --- a/tests/commandtest.c +++ b/tests/commandtest.c @@ -255,7 +255,8 @@ static int test3(const void *unused G_GNUC_UNUSED) */ static int test4(const void *unused G_GNUC_UNUSED) { - virCommandPtr cmd = virCommandNew(abs_builddir "/commandhelper"); + virCommandPtr cmd = virCommandNewArgList(abs_builddir "/commandhelper", + "--check-daemonize", NULL); char *pidfile = virPidFileBuildPath(abs_builddir, "commandhelper"); pid_t pid; int ret = -1;