bug-make
[Top][All Lists]
Advanced

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

[bug #47995] Parallel double-colon breaks FORCE


From: Joe Crayne
Subject: [bug #47995] Parallel double-colon breaks FORCE
Date: Tue, 24 May 2016 06:04:50 +0000 (UTC)
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0

URL:
  <http://savannah.gnu.org/bugs/?47995>

                 Summary: Parallel double-colon breaks FORCE
                 Project: make
            Submitted by: joecrayne
            Submitted on: Tue 24 May 2016 06:04:48 AM GMT
                Severity: 3 - Normal
              Item Group: Bug
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
       Component Version: None
        Operating System: POSIX-Based
           Fixed Release: None
           Triage Status: None

    _______________________________________________________

Details:

This issue was reported on the mailing list
<http://lists.gnu.org/archive/html/bug-make/2016-05/msg00041.html> as a
failure when building git in parallel which uses double-colons to make
multiple recipes run.  It was traced to my patch submitted in bug 44742.  Here
is a minimal test case:

+verbatum+
all::
        @echo one

all:: joe
        @echo four


joe: FORCE
        touch joe-is-forced

FORCE:

# $ make
# one
# touch joe-is-forced
# four
#
# $ make -j
# one
# four

-verbatum-

Debug messages show that the "joe" target was erroneously pruned by this
apparent optimization:

+verbatum+
   /* Prune the dependency graph: if we've already been here on _this_
     pass through the dependency graph, we don't have to go any further.
     We won't reap_children until we start the next pass, so no state
     change is possible below here until then.  */
  if (f->considered == considered)
    {
      /* Check for the case where a target has been tried and failed but
         the diagnostics haven't been issued. If we need the diagnostics
         then we will have to continue. */
      if (!(f->updated && f->update_status > us_none
            && !f->dontcare && f->no_diag))
        {
          DBF (DB_VERBOSE, _("Pruning file '%s'.\n"));
          return f->command_state == cs_finished ? f->update_status :
us_success;
        }
    }
-verbatum-

I believe this is based on an assumption that I've rendered false.  I'm having
trouble understanding how it was true in the first place.

An easy fix would be to elide this optimization in the case of parallel
double-colon builds.

Paul if you understand the issue better, I'd appreciate your thoughts on it.




    _______________________________________________________

Reply to this item at:

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

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




reply via email to

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