Module Name: src
Committed By: rillig
Date: Sat Feb 13 09:18:12 UTC 2021
Modified Files:
src/tests/lib/libcurses/director: director.c
src/tests/lib/libcurses/slave: slave.c
Log Message:
tests/libcurses: fix child process handling
The child process needs to be properly controlled by the parent process.
Otherwise it is not possible to get code coverage data from it using
gcov since that requires the child process to exit normally. Previously
the child process had been killed because its parent had exited.
To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/tests/lib/libcurses/director/director.c
cvs rdiff -u -r1.13 -r1.14 src/tests/lib/libcurses/slave/slave.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/lib/libcurses/director/director.c
diff -u src/tests/lib/libcurses/director/director.c:1.27 src/tests/lib/libcurses/director/director.c:1.28
--- src/tests/lib/libcurses/director/director.c:1.27 Sat Feb 13 08:26:12 2021
+++ src/tests/lib/libcurses/director/director.c Sat Feb 13 09:18:12 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: director.c,v 1.27 2021/02/13 08:26:12 rillig Exp $ */
+/* $NetBSD: director.c,v 1.28 2021/02/13 09:18:12 rillig Exp $ */
/*-
* Copyright 2009 Brett Lymn <[email protected]>
@@ -31,6 +31,7 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/mman.h>
+#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
@@ -72,7 +73,7 @@ void init_parse_variables(int); /* in te
* output in verbose mode, truncating the useful part of the error message.
*/
static void
-slave_died(int param)
+slave_died(int signo)
{
char last_words[256];
size_t count;
@@ -276,5 +277,12 @@ main(int argc, char *argv[])
yyparse();
fclose(yyin);
+ signal(SIGCHLD, SIG_DFL);
+ (void)close(to_slave);
+ (void)close(from_slave);
+
+ int status;
+ (void)waitpid(slave_pid, &status, 0);
+
exit(0);
}
Index: src/tests/lib/libcurses/slave/slave.c
diff -u src/tests/lib/libcurses/slave/slave.c:1.13 src/tests/lib/libcurses/slave/slave.c:1.14
--- src/tests/lib/libcurses/slave/slave.c:1.13 Sat Feb 13 08:17:15 2021
+++ src/tests/lib/libcurses/slave/slave.c Sat Feb 13 09:18:12 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: slave.c,v 1.13 2021/02/13 08:17:15 rillig Exp $ */
+/* $NetBSD: slave.c,v 1.14 2021/02/13 09:18:12 rillig Exp $ */
/*-
* Copyright 2009 Brett Lymn <[email protected]>
@@ -59,14 +59,17 @@ process_commands(void)
{
int len, maxlen, argslen, i, ret, type;
char *cmdbuf, *tmpbuf, **args, **tmpargs;
+ ssize_t nread;
len = maxlen = 30;
if ((cmdbuf = malloc(maxlen)) == NULL)
err(1, "slave cmdbuf malloc failed");
for (;;) {
- if (read(from_director, &type, sizeof(int)) < 0)
+ if ((nread = read(from_director, &type, sizeof(int))) < 0)
err(1, "slave command type read failed");
+ if (nread == 0)
+ break;
if (type != data_string)
errx(1, "Unexpected type for command, got %d", type);