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.