mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-12-02 00:01:05 -05:00
It's illegal for the user-supplied function to modify the hash table while executing hash_map*() methods. snap_file() may add elements due to EXTRA_PREREQS, so we can't call it via hash_map_args(). Diagnosis and test by Shim Manning <shimmanning@gmail.com> Possible fix by Dmitry Goncharov <dgoncharov@users.sf.net> * src/hash.h (hash_table): Remember when we're in hash_map*(). * src/hash.c (hash_init): Initialize the in-map value to false. (hash_map): Set the in-map value to true when walking the map. (hash_map_arg): Ditto. (hash_insert_at): Assert we're not in hash_map*() (hash_free_items): Ditto. (hash_delete_items): Ditto. (hash_free): Ditto. * src/file.c (snap_deps): Use hash_dump() to create a copy of the hash and walk that to call snap_file(), so we can add more files. (snap_file): Since we're calling it directly, don't use void* args.