Daniel is right, the memory should be eventually freed when ALL the child processes update their local configuration, i.e. do at least one iteration of their loop and call cfg_update(). Each child process updates its local cfg pointer to the global one and travels through the pending callback list. Every item of this list can have a set of memory address to free. The last child that processes the change frees the memory.
Check cfg_update_local with the loop:
while (cfg_child_cb != last_cb) {...}
cfg_child_cb_free_item() frees the "replaced" strings.
The restriction is that none of the processes should be idle for a very long time. They should at least update the local config from time to time. This may not be always the case.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.