bug-make
[Top][All Lists]
Advanced

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

[bug #15919] Make-3.81 rc1 hangs with -j 2 but not with -j 1


From: Icarus Sparry
Subject: [bug #15919] Make-3.81 rc1 hangs with -j 2 but not with -j 1
Date: Fri, 27 Oct 2006 01:14:47 +0000
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0

Follow-up Comment #8, bug #15919 (project make):

Line numbers are relative to remake.c, version 1.130.
The problem appears to be in check_dep. Stepping through the second and later
times it traverses the graph, in the case where "file" has the record for
"intermed".

It increases depth, and marks the structure as updating.
The if on line 941 is false, this is an intermediate file.
So take the else on 953. The if on 958 is false, we have cmds for this file.
The if on line 966 is false, as we have cmds still!

At line 976 mtime is 1, NONEXISTENT_MTIME, so the if on 978 is false, so we
take the else part, lines 983 to 1032. This is a loop over the dependencies,
in this case there are 2, "src" and "phony".

Stepping through for "src"
The if on 993 is false, "src" is not being updated.
line 1013, maybe_make = 0
The call to check_dep (line 1014) returns 0, and leaves maybe_make
unchanged.
The if on 1016 is true, so *must_make_ptr = 0 (unchanged)
The if on 1019 is false (dep_status==0)
The if on lines 102[23] is false, the command status is cs_finished.

Stepping through for "phony"
The if on 993 is false, "phony" is not being updated.
line 1013, maybe_make = 0
The call to check_dep (line 1014 returns 0, but changes maybe_make to 1.
The if on 1016 is false, this is an order only dependency,
so *must_make_ptr is unchanged.
The if on 1019 is false (dep_status == 0)
The if on lines 102[23] is false, the command_status is cs_finished.

It then unmarks the "intermed" file as being updated, and returns.

However this leaves a tree

                    + src
target -- intermed -|
                    + phony

where src & phony are in state "cs_finished", target and intermed are in
state cs_deps_running, and nothing is going to change this.

The "maybe_make" local variable in the update_file_1("target",1) (to abuse
notation) is left as zero, but its dependency ("intermed") is still in
cs_deps_running state, so it is not updated.


    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?15919>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]