=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/make/job.c,v retrieving revision 1.118 retrieving revision 1.119 diff -c -r1.118 -r1.119 *** src/usr.bin/make/job.c 2009/08/16 09:50:13 1.118 --- src/usr.bin/make/job.c 2010/07/15 10:37:32 1.119 *************** *** 1,5 **** /* $OpenPackages$ */ ! /* $OpenBSD: job.c,v 1.118 2009/08/16 09:50:13 espie Exp $ */ /* $NetBSD: job.c,v 1.16 1996/11/06 17:59:08 christos Exp $ */ /* --- 1,5 ---- /* $OpenPackages$ */ ! /* $OpenBSD: job.c,v 1.119 2010/07/15 10:37:32 espie Exp $ */ /* $NetBSD: job.c,v 1.16 1996/11/06 17:59:08 christos Exp $ */ /* *************** *** 134,140 **** char buffer[JOB_BUFSIZE]; size_t pos; }; ! typedef struct Job_ { pid_t pid; /* The child's process ID */ GNode *node; /* The target the child is making */ --- 134,140 ---- char buffer[JOB_BUFSIZE]; size_t pos; }; ! typedef struct Job_ { pid_t pid; /* The child's process ID */ GNode *node; /* The target the child is making */ *************** *** 165,171 **** /* data structure linked to job handling through select */ static fd_set *output_mask = NULL; /* File descriptors to look for */ ! static fd_set *actual_mask = NULL; /* actual select argument */ static int largest_fd = -1; static size_t mask_size = 0; --- 165,171 ---- /* data structure linked to job handling through select */ static fd_set *output_mask = NULL; /* File descriptors to look for */ ! static fd_set *actual_mask = NULL; /* actual select argument */ static int largest_fd = -1; static size_t mask_size = 0; *************** *** 218,230 **** static void handle_all_jobs_output(void); ! /* handle_job_output(job, n, finish): * n = 0 or 1 (stdout/stderr), set finish to retrieve everything. */ static void handle_job_output(Job *, int, bool); static void print_partial_buffer(struct job_pipe *, Job *, FILE *, size_t); ! static void print_partial_buffer_and_shift(struct job_pipe *, Job *, FILE *, size_t); static bool print_complete_lines(struct job_pipe *, Job *, FILE *, size_t); --- 218,230 ---- static void handle_all_jobs_output(void); ! /* handle_job_output(job, n, finish): * n = 0 or 1 (stdout/stderr), set finish to retrieve everything. */ static void handle_job_output(Job *, int, bool); static void print_partial_buffer(struct job_pipe *, Job *, FILE *, size_t); ! static void print_partial_buffer_and_shift(struct job_pipe *, Job *, FILE *, size_t); static bool print_complete_lines(struct job_pipe *, Job *, FILE *, size_t); *************** *** 269,275 **** if (p->n->lineno) Error(" %s %d (%s, line %lu of %s)", type, p->code, p->n->name, p->n->lineno, p->n->fname); ! else Error(" %s %d (%s)", type, p->code, p->n->name); } } --- 269,275 ---- if (p->n->lineno) Error(" %s %d (%s, line %lu of %s)", type, p->code, p->n->name, p->n->lineno, p->n->fname); ! else Error(" %s %d (%s)", type, p->code, p->n->name); } } *************** *** 278,284 **** banner(Job *job, FILE *out) { if (job->node != lastNode) { ! if (DEBUG(JOBBANNER)) (void)fprintf(out, "--- %s ---\n", job->node->name); lastNode = job->node; } --- 278,284 ---- banner(Job *job, FILE *out) { if (job->node != lastNode) { ! if (DEBUG(JOBBANNER)) (void)fprintf(out, "--- %s ---\n", job->node->name); lastNode = job->node; } *************** *** 447,453 **** va_end(va); } } ! static void close_job_pipes(Job *job) { --- 447,453 ---- va_end(va); } } ! static void close_job_pipes(Job *job) { *************** *** 464,470 **** *----------------------------------------------------------------------- * process_job_status -- * Do processing for the given job including updating ! * parents and starting new jobs as available/necessary. * * Side Effects: * Some nodes may be put on the toBeMade queue. --- 464,470 ---- *----------------------------------------------------------------------- * process_job_status -- * Do processing for the given job including updating ! * parents and starting new jobs as available/necessary. * * Side Effects: * Some nodes may be put on the toBeMade queue. *************** *** 484,490 **** int reason, code; bool done; ! debug_printf("Process %ld (%s) exited with status %d.\n", (long)job->pid, job->node->name, status); /* parse status */ if (WIFEXITED(status)) { --- 484,490 ---- int reason, code; bool done; ! debug_printf("Process %ld (%s) exited with status %d.\n", (long)job->pid, job->node->name, status); /* parse status */ if (WIFEXITED(status)) { *************** *** 530,542 **** if (done || DEBUG(JOB)) { if (reason == JOB_EXITED) { ! debug_printf("Process %ld (%s) exited.\n", (long)job->pid, job->node->name); if (code != 0) { banner(job, stdout); (void)fprintf(stdout, "*** Error code %d %s\n", code, ! (job->node->type & OP_IGNORE) ? "(ignored)" : ""); if (job->node->type & OP_IGNORE) { --- 530,542 ---- if (done || DEBUG(JOB)) { if (reason == JOB_EXITED) { ! debug_printf("Process %ld (%s) exited.\n", (long)job->pid, job->node->name); if (code != 0) { banner(job, stdout); (void)fprintf(stdout, "*** Error code %d %s\n", code, ! (job->node->type & OP_IGNORE) ? "(ignored)" : ""); if (job->node->type & OP_IGNORE) { *************** *** 545,551 **** } } else if (DEBUG(JOB)) { (void)fprintf(stdout, ! "*** %ld (%s) Completed successfully\n", (long)job->pid, job->node->name); } } else { --- 545,551 ---- } } else if (DEBUG(JOB)) { (void)fprintf(stdout, ! "*** %ld (%s) Completed successfully\n", (long)job->pid, job->node->name); } } else { *************** *** 572,578 **** } free(job); ! if (errors && !keepgoing && aborting != ABORT_INTERRUPT) aborting = ABORT_ERROR; --- 572,578 ---- } free(job); ! if (errors && !keepgoing && aborting != ABORT_INTERRUPT) aborting = ABORT_ERROR; *************** *** 580,591 **** Finish(errors); } ! static void prepare_pipe(struct job_pipe *p, int *fd) { p->pos = 0; (void)fcntl(fd[0], F_SETFD, FD_CLOEXEC); ! p->fd = fd[0]; close(fd[1]); if (output_mask == NULL || p->fd > largest_fd) { --- 580,591 ---- Finish(errors); } ! static void prepare_pipe(struct job_pipe *p, int *fd) { p->pos = 0; (void)fcntl(fd[0], F_SETFD, FD_CLOEXEC); ! p->fd = fd[0]; close(fd[1]); if (output_mask == NULL || p->fd > largest_fd) { *************** *** 595,605 **** ofdn = howmany(largest_fd+1, NFDBITS); if (fdn != ofdn) { ! output_mask = emult_realloc(output_mask, fdn, sizeof(fd_mask)); ! memset(((char *)output_mask) + ofdn * sizeof(fd_mask), 0, (fdn-ofdn) * sizeof(fd_mask)); ! actual_mask = emult_realloc(actual_mask, fdn, sizeof(fd_mask)); mask_size = fdn * sizeof(fd_mask); } --- 595,605 ---- ofdn = howmany(largest_fd+1, NFDBITS); if (fdn != ofdn) { ! output_mask = emult_realloc(output_mask, fdn, sizeof(fd_mask)); ! memset(((char *)output_mask) + ofdn * sizeof(fd_mask), 0, (fdn-ofdn) * sizeof(fd_mask)); ! actual_mask = emult_realloc(actual_mask, fdn, sizeof(fd_mask)); mask_size = fdn * sizeof(fd_mask); } *************** *** 612,618 **** /*- *----------------------------------------------------------------------- * JobExec -- ! * Execute the shell for the given job. Called from JobStart * * Side Effects: * A shell is executed, outputs is altered and the Job structure added --- 612,618 ---- /*- *----------------------------------------------------------------------- * JobExec -- ! * Execute the shell for the given job. Called from JobStart * * Side Effects: * A shell is executed, outputs is altered and the Job structure added *************** *** 633,639 **** setup_engine(1); ! /* Create the pipe by which we'll get the shell's output. */ if (pipe(fdout) == -1) Punt("Cannot create pipe: %s", strerror(errno)); --- 633,639 ---- setup_engine(1); ! /* Create the pipe by which we'll get the shell's output. */ if (pipe(fdout) == -1) Punt("Cannot create pipe: %s", strerror(errno)); *************** *** 703,709 **** (void)fprintf(stdout, "Running %ld (%s)\n", (long)cpid, job->node->name); ! for (ln = Lst_First(&job->node->commands); ln != NULL ; ln = Lst_Adv(ln)) fprintf(stdout, "\t%s\n", (char *)Lst_Datum(ln)); (void)fflush(stdout); --- 703,709 ---- (void)fprintf(stdout, "Running %ld (%s)\n", (long)cpid, job->node->name); ! for (ln = Lst_First(&job->node->commands); ln != NULL ; ln = Lst_Adv(ln)) fprintf(stdout, "\t%s\n", (char *)Lst_Datum(ln)); (void)fflush(stdout); *************** *** 928,934 **** *----------------------------------------------------------------------- */ static void ! handle_pipe(struct job_pipe *p, Job *job, FILE *out, bool finish) { int nr; /* number of bytes read */ --- 928,934 ---- *----------------------------------------------------------------------- */ static void ! handle_pipe(struct job_pipe *p, Job *job, FILE *out, bool finish) { int nr; /* number of bytes read */ *************** *** 1000,1006 **** * Notes: * We do waits, blocking or not, according to the wisdom of our * caller, until there are no more children to report. For each ! * job, call process_job_status to finish things off. *----------------------------------------------------------------------- */ void --- 1000,1006 ---- * Notes: * We do waits, blocking or not, according to the wisdom of our * caller, until there are no more children to report. For each ! * job, call process_job_status to finish things off. *----------------------------------------------------------------------- */ void *************** *** 1159,1165 **** * Job_Full -- * See if the job table is full. It is considered full * if we are in the process of aborting OR if we have ! * reached/exceeded our quota. * * Results: * true if the job table is full, false otherwise --- 1159,1165 ---- * Job_Full -- * See if the job table is full. It is considered full * if we are in the process of aborting OR if we have ! * reached/exceeded our quota. * * Results: * true if the job table is full, false otherwise *************** *** 1170,1183 **** { if (Job_Full() || expensive_job) return false; ! else return true; } /*- *----------------------------------------------------------------------- * Job_Empty -- ! * See if the job table is empty. * * Results: * true if it is. false if it ain't. --- 1170,1183 ---- { if (Job_Full() || expensive_job) return false; ! else return true; } /*- *----------------------------------------------------------------------- * Job_Empty -- ! * See if the job table is empty. * * Results: * true if it is. false if it ain't. *************** *** 1312,1318 **** aborting = ABORT_ERROR; if (nJobs) { ! for (ln = Lst_First(&runningJobs); ln != NULL; ln = Lst_Adv(ln)) { job = (Job *)Lst_Datum(ln); --- 1312,1318 ---- aborting = ABORT_ERROR; if (nJobs) { ! for (ln = Lst_First(&runningJobs); ln != NULL; ln = Lst_Adv(ln)) { job = (Job *)Lst_Datum(ln);