Fix a deadlock with redo-oob.
If a checksummed target A used to exist but is now missing, and we tried to redo-ifchange that exact file, we would unnecessarily run 'redo-oob A A'; that is, we have to build A in order to determine if A needs to be built. The sub-targets of redo-oob aren't run with REDO_UNLOCKED, so this would deadlock instantly. Add an assertion to redo-oob to ensure we never try to redo-ifchange the primary target (thus converting the deadlock into an exception). And skip doing redo-oob when the target is already the same as the thing we have to check.
This commit is contained in:
parent
91630a892a
commit
1d26d99e0c
4 changed files with 12 additions and 1 deletions
|
|
@ -56,3 +56,9 @@ redo-ifchange usestamp usestamp2
|
|||
[ "$(wc -l <stampy.log)" -eq 5 ] || exit 71
|
||||
[ "$(wc -l <usestamp.log)" -eq 2 ] || exit 72
|
||||
[ "$(wc -l <usestamp2.log)" -eq 1 ] || exit 73
|
||||
|
||||
# this simple test used to cause a deadlock.
|
||||
../flush-cache.sh
|
||||
rm -f stampy
|
||||
redo-ifchange stampy
|
||||
[ "$(wc -l <stampy.log)" -eq 6 ] || exit 74
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue