Ok thanks Thomas for the quick answer.
I'm not feeling ready for a big dev in NM adding support for dnsmasq as an external service.
Moreover, we had already investigated about systemd-resolved but our particular use cases , it is not fitted.
I think I'll do a custom patch (of course I'll try to upstream this) of NM that will stop DNS plugin inside nm_dns_manager_stop.
But a question remains , is it normal that ref count of NMManager is still 3 at the end of main ? I spent 2 days trying to track objects lifecycle
but I gave up on this.
Thanks again for your help
From: Thomas Haller Sent: Friday, October 30, 2020 4:02 PM To: Frederic Martinsons; networkmanager-list gnome org Subject: Re: Question about DNS managemer lifecycle On Fri, 2020-10-30 at 13:45 +0000, Frederic Martinsons wrote:
> Hello NM hackers, > > I'm tracking a nasty bug in dnsmasq (possibly introduced by us > because of patches) and it is triggered during shutdown (while > systemd stop all services). > > Tracking this, I activated traces of NetworkManager and it seems that > dnsmasq (the dns manager I used) is not stopped by NetworkManager. I > patched NM to print refcount of all objects and I see that > NMDnsManager has refcount at 2 after calling nm_dns_manager_stop in > main.c. > > I would like to have information about DNS manger lifecycle since I > see a comment in NM merge requests which seem telling that it may be > done on purpose (to not stop dnsmasq) , I'm talking about the > following comment: > https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/254#note_217659 > > By the way, I use NetworkManager 1.26.4 and dnsmasq 2.82. > > Thank you very much for any help you can provide. Hi, when restarting (or only stopping) NetworkManager, it leaves the interfaces up, in an attempt not to disrupt your connectivity. So, there is a point in leaving the dnsmasq instance running. Restarting NetworkManager (with it's aim to not disrupt connectivity) has many coerner cases where it doesn't work overly well. So restarting NetworkManager should not be done on a regular basis. Leaving the dnsmasq instance running can be problematic, because after restart the dnsmasq instance is no longer a child process (we cannot waitpid on it). Also, in general it might be undesirable. On the other hand, stopping NetworkManager and breaking DNS is also undesirable. The code, and in particular commit [1] makes an effort to get that right. But it's not entirely clear whether the dnsmasq instance should be left running or not. [1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/254/diffs?commit_id=a780b04837f444c9dbb63d48442c78e3cc4dcfe9 If you find a bug, we would gladly accept patches. As to what is the optimal/desired behahavior, that is up for discussion. A better solution would be to extend "dns=dnsmasq" option to run the dnsmasq instance as a separate service (which would work well when using systemd, but it might be harder on systems without systemd). It not likely that somebody invests the effort of improving dns=dnsmasq, especially since an improved DNS plugin already exists: systemd-resolved. best, Thomas |