Release the pool slot held by an edge whether it succeeds or fails
authorFredrik Medley <fredrik.medley@gmail.com>
Sun, 12 Jul 2015 06:53:19 +0000 (08:53 +0200)
committerBrad King <brad.king@kitware.com>
Wed, 6 Apr 2016 15:21:09 +0000 (11:21 -0400)
commit7d21426c56306917ebaf16671a75215672d79755
tree58ec26665664377828f9a56e7ed0ff387776bfbe
parent78f548880e549c701bd77760e4b3f3a4ee147641
Release the pool slot held by an edge whether it succeeds or fails

When an edge finishes building, it should be release from its pool.
Make sure that this also is the case when an edge fails to build.

The bug can be shown with a pool has size N, then `ninja -k N+1` will
still stop after N failing commands for that pool, even if there are
many more jobs to be done for that pool:

    pool mypool
      depth = 1
    rule bad_rule
      command = false
      pool = mypool
    build a : bad_rule
    build b : bad_rule

Current behaviour:

    $ ninja -k 0
    [1/2] false
    FAILED: false
    ninja: build stopped: cannot make progress due to previous errors.

Expected behaviour:

    $ ninja -k 0
    [1/2] false
    FAILED: false
    [2/2] false
    FAILED: false
    ninja: build stopped: cannot make progress due to previous errors.

Signed-off-by: Fredrik Medley <fredrik.medley@gmail.com>
src/build.cc
src/build.h
src/build_test.cc