diff options
author | Paul Smith <psmith@gnu.org> | 2005-05-03 13:57:20 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2005-05-03 13:57:20 +0000 |
commit | 9d5b5bd2f57cad88b2ea689bdce4f3d8662e73a4 (patch) | |
tree | 9cbe48582bbbf5a6d6754676cfc58e404feeb5e0 /ChangeLog | |
parent | 49ee105c685cb84bc3057e8b7666fc0cc7090047 (diff) | |
download | gunmake-9d5b5bd2f57cad88b2ea689bdce4f3d8662e73a4.tar.gz |
Fix problems with losing tokens in the jobserver, reported by Grant
Taylor. There are two forms of this: first, it was possible to lose
tokens when using -j and -l at the same time, because waiting jobs were
not checked when determining whether any jobs were outstanding. Second,
if you had an exported recursive variable that contained a $(shell ...)
function there is a possibility to lose tokens, since a token was taken
but the child list was not updated until after the shell function was
complete.
To resolve this I introduced a new variable that counted the number of
tokens we have obtained, rather than checking whether there were any
children on the list. I also added some sanity checks to make sure we
weren't writing back too many or not enough tokens. And, the master
make will drain the token pipe before exiting and compare the count of
tokens at the end to what was written there at the beginning.
Also:
* Ensure a bug in the environment (missing "=") doesn't cause make to core.
* Rename the .DEFAULT_TARGET variable to .DEFAULT_GOAL, to match the
terminology in the documentation and other variables like MAKECMDGOALS.
* Add documentation of the .DEFAULT_GOAL special variable.
Still need to document the secondary expansion stuff...
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 56 |
1 files changed, 56 insertions, 0 deletions
@@ -1,3 +1,59 @@ +2005-05-03 Paul D. Smith <psmith@gnu.org> + + Rename .DEFAULT_TARGET to .DEFAULT_GOAL: in GNU make terminology + the targets which are to ultimately be made are called "goals"; + see the GNU make manual. Also, MAKECMDGOALS, etc. + + * filedef.h, read.c, main.c: Change .DEFAULT_TARGET to + .DEFAULT_GOAL, and default_target_name to default_goal_name. + * doc/make.texi (Special Variables): Document .DEFAULT_GOAL. + +2005-05-02 Paul D. Smith <psmith@gnu.org> + + * job.c, vmsjobs.c (vmsWaitForChildren, vms_redirect, + vms_handle_apos, vmsHandleChildTerm, reEnableAst, astHandler, + tryToSetupYAst, child_execute_job) [VMS]: Move VMS-specific + functions to vmsjobs.c. #include it into jobs.c. + + Grant Taylor <gtaylor@picante.com> reports that -j# can lose + jobserver tokens. I found that this happens when an exported + recursive variable contains a $(shell ...) function reference: in + this situation we could "forget" to write back a token. + + * job.c, job.h: Add variable jobserver_tokens: counts the tokens + we have. It's not reliable to depend on the number of children in + our linked list so keep a separate count. + (new_job): Check jobserver_tokens rather than children && + waiting_jobs. Increment jobserver_tokens when we get one. + (free_child): If jobserver_tokens is 0, internal error. If it's + >1, write a token back to the jobserver pipe (we don't write a + token for the "free" job). Decrement jobserver_tokens. + + * main.c: Add variable master_job_slots. + (main): Set it to hold the number of jobs requested if we're the + master process, when using the jobserver. + (die): Sanity checks: first test jobserver_tokens to make sure + this process isn't holding any tokens we didn't write back. + Second, if master_job_slots is set count the tokens left in the + jobserver pipe and ensure it's the same as master_job_slots (- 1). + +2005-04-24 Paul D. Smith <psmith@gnu.org> + + Grant Taylor <gtaylor@picante.com> reports that -j# in conjunction + with -l# can lose jobserver tokens, because waiting jobs are not + consulted properly when checking for the "free" token. + + * job.c (free_child): Count waiting_jobs as having tokens. + * job.c (new_job): Ditto. Plus, call start_waiting_jobs() here to + handle jobs waiting for the load to drop. + +2005-04-23 Paul D. Smith <psmith@gnu.org> + + * main.c (main): Be careful to not core if a variable setting in + the environment doesn't contain an '='. This is illegal but can + happen in broken setups. + Reported by Joerg Schilling <schilling@fokus.fraunhofer.de>. + 2005-04-12 Paul D. Smith <psmith@gnu.org> The second expansion feature causes significant slowdown. Timing |