Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): rewrite documentation of Job



details:   https://anonhg.NetBSD.org/src/rev/cdf2e2f59d28
branches:  trunk
changeset: 1014648:cdf2e2f59d28
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Sep 27 23:12:12 2020 +0000

description:
make(1): rewrite documentation of Job

The comment above a struct is supposed to give a high-level overview.
The previous comment didn't do that but instead listed the struct fields
in declaration order in a numbered list, which was not helpful.

diffstat:

 usr.bin/make/job.h |  73 +++++++++++++++++++++++++++--------------------------
 1 files changed, 37 insertions(+), 36 deletions(-)

diffs (118 lines):

diff -r 942bb563ca6b -r cdf2e2f59d28 usr.bin/make/job.h
--- a/usr.bin/make/job.h        Sun Sep 27 22:17:07 2020 +0000
+++ b/usr.bin/make/job.h        Sun Sep 27 23:12:12 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: job.h,v 1.51 2020/09/27 21:35:16 rillig Exp $  */
+/*     $NetBSD: job.h,v 1.52 2020/09/27 23:12:12 rillig Exp $  */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -73,10 +73,10 @@
  *     from: @(#)job.h 8.1 (Berkeley) 6/6/93
  */
 
-/*-
- * job.h --
- *     Definitions pertaining to the running of jobs in parallel mode.
+/*
+ * Running of jobs in parallel mode.
  */
+
 #ifndef MAKE_JOB_H
 #define MAKE_JOB_H
 
@@ -110,28 +110,6 @@
  */
 #define POLL_MSEC      5000
 
-/*-
- * Job Table definitions.
- *
- * Each job has several things associated with it:
- *     1) The process id of the child shell
- *     2) The graph node describing the target being made by this job
- *     3) A LstNode for the first command to be saved after the job
- *        completes. This is NULL if there was no "..." in the job's
- *        commands.
- *     4) An FILE* for writing out the commands. This is only
- *        used before the job is actually started.
- *     5) The output is being caught via a pipe and
- *        the descriptors of our pipe, an array in which output is line
- *        buffered and the current position in that buffer are all
- *        maintained for each job.
- *     6) A word of flags which determine how the module handles errors,
- *        echoing, etc. for the job
- *
- * When a job is finished, the Make_Update function is called on each of the
- * parents of the node which was just remade. This takes care of the upward
- * traversal of the dependency graph.
- */
 struct pollfd;
 
 
@@ -139,21 +117,43 @@
 # include "meta.h"
 #endif
 
-#define JOB_BUFSIZE    1024
+/* A Job manages the shell commands that are run to create a single target.
+ * Each job is run in a separate subprocess by a shell.  Several jobs can run
+ * in parallel.
+ *
+ * The shell commands for the target are written to a temporary file,
+ * then the shell is run with the temporary file as stdin, and the output
+ * of that shell is captured via a pipe.
+ *
+ * When a job is finished, Make_Update updates all parents of the node
+ * that was just remade, marking them as ready to be made next if all
+ * other dependencies are finished as well. */
 typedef struct Job {
-    int pid;                   /* The child's process ID */
-    GNode *node;               /* The target the child is making */
-    StringListNode *tailCmds;  /* The node of the first command to be
-                                * saved when the job has been run */
-    FILE *cmdFILE;             /* When creating the shell script, this is
-                                * where the commands go */
+    /* The process ID of the shell running the commands */
+    int pid;
+
+    /* The target the child is making */
+    GNode *node;
+
+    /* If one of the shell commands is "...", all following commands are
+     * delayed until the .END node is made.  This list node points to the
+     * first of these commands, if any. */
+    StringListNode *tailCmds;
+
+    /* When creating the shell script, this is where the commands go.
+     * This is only used before the job is actually started. */
+    FILE *cmdFILE;
+
     int exit_status;           /* from wait4() in signal handler */
+
     char job_state;            /* status of the job entry */
 #define JOB_ST_FREE    0       /* Job is available */
 #define JOB_ST_SETUP   1       /* Job is allocated but otherwise invalid */
 #define JOB_ST_RUNNING 3       /* Job is running, pid valid */
 #define JOB_ST_FINISHED        4       /* Job is done (ie after SIGCHILD) */
+
     char job_suspended;
+
     short flags;               /* Flags to control treatment of job */
 #define        JOB_IGNERR      0x001   /* Ignore non-zero exits */
 #define        JOB_SILENT      0x002   /* no output */
@@ -165,10 +165,11 @@
 
     int jobPipe[2];            /* Pipe for reading output from job */
     struct pollfd *inPollfd;   /* pollfd associated with inPipe */
+
+#define JOB_BUFSIZE    1024
+    /* Buffer for storing the output of the job, line by line. */
     char outBuf[JOB_BUFSIZE + 1];
-                               /* Buffer for storing the output of the
-                                * job, line by line */
-    int curPos;                        /* Current position in op_outBuf */
+    int curPos;                        /* Current position in outBuf. */
 
 #ifdef USE_META
     struct BuildMon    bm;



Home | Main Index | Thread Index | Old Index