Module Name: src Committed By: rillig Date: Sun Nov 29 18:49:36 UTC 2020
Modified Files: src/usr.bin/make: dir.c src/usr.bin/make/unit-tests: Makefile Log Message: make(1): clean up memory management for CachedDirs Previously, the reference count for a newly created CacheDir had been set to 1 in CacheNewDir. This was wrong because at that point, the object had not been referenced by any nonlocal variable. The reference count is no longer incremented at this point. All callers of CacheNewDir either append the newly created CachedDir to a SearchPath via Lst_Append and CachedDir_Ref, or they assign it to a global variable via CachedDir_Assign. Since the reference count is no longer wrongly incremented, it does not need to be decremented more than necessary in Dir_End. To keep the code simple and maintainable, all assignments to global variables are now handled by CachedDir_Assign. Adding a CachedDir to a list is still done manually via Lst_Append, and the corresponding code for decrementing is in SearchPath_Clean and SearchPath_Free. These details may be cleaned up in a follow-up commit. As a result, when OpenDirs_Done is called in the unit tests, the list of open directories is empty. It had been non-empty in a single unit test before (dep-wildcards.mk), as a result of calling Dir_Expand. The additional debug logging for the reference counting is not enabled by default since it contains memory addresses, which makes the output dependent on the memory allocator. The function CachedDir_Destroy has been merged into CachedDir_Undef, which had only been used in Dir_End before. The new name emphasizes that it corresponds to CachedDir_Ref. To generate a diff of this commit: cvs rdiff -u -r1.240 -r1.241 src/usr.bin/make/dir.c cvs rdiff -u -r1.228 -r1.229 src/usr.bin/make/unit-tests/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.