Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make Fix meta_compat mode.
details: https://anonhg.NetBSD.org/src/rev/78de49900b0c
branches: trunk
changeset: 969043:78de49900b0c
user: sjg <sjg%NetBSD.org@localhost>
date: Thu Feb 06 01:13:19 2020 +0000
description:
Fix meta_compat mode.
We need to call meta_job_output() from meta_compat_parent()
Also, the need for extra fds for meta mode only applies when
using filemon_ktrace.c.
Since we hope to see more interfaces like that, test for
USE_FILEMON_DEV being not defined.
Reviewed by: riastradh
diffstat:
usr.bin/make/Makefile | 6 +++---
usr.bin/make/job.c | 16 ++++++++--------
usr.bin/make/meta.c | 19 +++++++++----------
3 files changed, 20 insertions(+), 21 deletions(-)
diffs (169 lines):
diff -r 1b94f4400256 -r 78de49900b0c usr.bin/make/Makefile
--- a/usr.bin/make/Makefile Thu Feb 06 00:32:07 2020 +0000
+++ b/usr.bin/make/Makefile Thu Feb 06 01:13:19 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.68 2020/01/19 19:50:54 riastradh Exp $
+# $NetBSD: Makefile,v 1.69 2020/02/06 01:13:19 sjg Exp $
# @(#)Makefile 5.2 (Berkeley) 12/28/90
PROG= make
@@ -24,7 +24,7 @@
.PATH: ${.CURDIR}/filemon
SRCS+= filemon_${USE_FILEMON}.c
-CPPFLAGS+= -DUSE_FILEMON
+CPPFLAGS+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
.if ${USE_FILEMON} == "dev"
FILEMON_H ?= /usr/include/dev/filemon/filemon.h
@@ -67,5 +67,5 @@
COPTS.parse.c+= ${GCC_NO_FORMAT_TRUNCATION}
# A simple unit-test driver to help catch regressions
-accept test:
+accept test: .MAKE
cd ${.CURDIR}/unit-tests && MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}
diff -r 1b94f4400256 -r 78de49900b0c usr.bin/make/job.c
--- a/usr.bin/make/job.c Thu Feb 06 00:32:07 2020 +0000
+++ b/usr.bin/make/job.c Thu Feb 06 01:13:19 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $ */
+/* $NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: job.c,v 1.196 2020/01/19 19:42:32 riastradh Exp $");
+__RCSID("$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -362,7 +362,7 @@
static unsigned
nfds_per_job(void)
{
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta)
return 2;
#endif
@@ -2145,7 +2145,7 @@
job = jobfds[i];
if (job->job_state == JOB_ST_RUNNING)
JobDoOutput(job, FALSE);
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
/*
* With meta mode, we may have activity on the job's filemon
* descriptor too, which at the moment is any pollfd other than
@@ -2824,7 +2824,7 @@
jobfds[nfds] = job;
job->inPollfd = &fds[nfds];
nfds++;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
fds[nfds].fd = meta_job_fd(job);
fds[nfds].events = fds[nfds].fd == -1 ? 0 : POLLIN;
@@ -2842,7 +2842,7 @@
Punt("Unwatching unwatched job");
i = job->inPollfd - fds;
nfds--;
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
/*
* Sanity check: there should be two fds per job, so the job's
@@ -2861,7 +2861,7 @@
fds[i] = fds[nfds];
jobfds[i] = jobfds[nfds];
jobfds[i]->inPollfd = &fds[i];
-#ifdef USE_META
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
if (useMeta) {
fds[i + 1] = fds[nfds + 1];
jobfds[i + 1] = jobfds[nfds + 1];
diff -r 1b94f4400256 -r 78de49900b0c usr.bin/make/meta.c
--- a/usr.bin/make/meta.c Thu Feb 06 00:32:07 2020 +0000
+++ b/usr.bin/make/meta.c Thu Feb 06 01:13:19 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.77 2020/01/22 21:04:29 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.78 2020/02/06 01:13:19 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -716,7 +716,7 @@
void
meta_job_parent(Job *job, pid_t pid)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -733,7 +733,7 @@
int
meta_job_fd(Job *job)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -751,7 +751,7 @@
int
meta_job_event(Job *job)
{
-#ifdef USE_FILEMON
+#if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV)
BuildMon *pbm;
if (job != NULL) {
@@ -1680,16 +1680,13 @@
meta_compat_parent(pid_t child)
{
int outfd, metafd, maxfd, nfds;
- char buf[BUFSIZ];
+ char buf[BUFSIZ+1];
fd_set readfds;
meta_job_parent(NULL, child);
close(childPipe[1]); /* child side */
outfd = childPipe[0];
- if (!Mybm.filemon) /* no meta */
- return;
- metafd = filemon_readfd(Mybm.filemon);
-
+ metafd = Mybm.filemon ? filemon_readfd(Mybm.filemon) : -1;
maxfd = -1;
if (outfd > maxfd)
maxfd = outfd;
@@ -1713,7 +1710,7 @@
if (outfd != -1 && FD_ISSET(outfd, &readfds)) do {
/* XXX this is not line-buffered */
- ssize_t nread = read(outfd, buf, sizeof buf);
+ ssize_t nread = read(outfd, buf, sizeof(buf) - 1);
if (nread == -1)
err(1, "read");
if (nread == 0) {
@@ -1723,6 +1720,8 @@
}
fwrite(buf, 1, (size_t)nread, stdout);
fflush(stdout);
+ buf[nread] = '\0';
+ meta_job_output(NULL, buf, "");
} while (0);
if (metafd != -1 && FD_ISSET(metafd, &readfds)) {
if (meta_job_event(NULL) <= 0)
Home |
Main Index |
Thread Index |
Old Index