Up to [cvs.NetBSD.org] / src / usr.bin / make / unit-tests
Request diff between arbitrary revisions
Keyword substitution: kv
Default branch: MAIN
make(1): move Job.xtraced to ShellWriter This flag was placed wrong in the Job since it is only necessary as long as the shell commands are written to the shell file. Resetting it in JobStart and JobExec was completely misguided since that is far away from writing the shell commands; this should have been done in JobPrintCommands instead. The status of this flag doesn't need to be printed in debugging mode since it is controlled by a single command line option (-dx) and does not interact with all the other switches.
make(1): split JobFlags into separate fields Having all these flags in a single bitmask makes it harder to see where exactly they can possibly be used since their state could also be modified using the unsuspicious job->flags = 0. Using individual names just leaves the single memset, and that is only used during initialization.
make(1): fix test opt-debug-jobs when compiled with dash as shell make USER_CPPFLAGS=-DDEFSHELL_CUSTOM='\"/usr/pkg/bin/dash\"'
make(1): avoid race condition in test opt-debug-jobs Thanks sjg for finding this and suggesting the fix.
make(1): clean up debug output for running jobs There is no remote anymore, therefore mentioning locally is redundant. It was a bad idea anyway to build format strings that work with parts of words.
make(1): fix test opt-debug-jobs on non-native platforms
make(1): revert previous commit It had accidentally reverted all the work from the past few days.
make(1): fix double-free bug in -DCLEANUP mode (since 2020-10-02) The bug had been introduced with dir.c 1.155 on 2020-10-02 22:20:25. In that commit, openDirectories was replaced with a combination of a list with a hash table, for more efficient lookup by name. Upon cleanup, OpenDirs_Done is called, which in turn called Dir_ClearPath. Dir_ClearPath takes full ownership of the given list and empties it. This was no problem before since afterwards the list was empty and calling Lst_Free just frees the remaining list pointer. With OpenDirs, this list was combined with a hash table, and the hash table contains the list nodes, assuming that the OpenDirs functions have full ownership of both the list and the hash table. This assumption was generally correct, except for the one moment during cleanup where full ownership of the list was passed to Dir_ClearPath, while the hash table still contained pointers to the (now freed) list nodes. This by itself was not a problem since the hash table would be freed afterwards. But as part of Dir_ClearPath, OpenDirs_Remove was called, which looked up the freed directory by name and now found the freed list node, trying to free it again. Boom. Fixed by replacing the call to Dir_ClearPath with code that only frees the directories, without giving up control over the list.
make(1): add test for the -dj debug option
make(1): add tests for each debug option