[libvirt] [PATCH 5/5] libvirtd: Fix order of cleanup processing
Erik Skultety
eskultet at redhat.com
Fri Nov 10 15:23:50 UTC 2017
On Tue, Nov 07, 2017 at 09:39:56PM -0500, John Ferlan wrote:
> Current cleanup processing is ad-hoc at best - it's led to a couple of
> strange and hard to diagnose timing problems and crashes.
>
> So rather than perform cleanup in a somewhat random order, let's
> perform cleanup in the exact opposite order of startup.
>
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> daemon/libvirtd.c | 42 +++++++++++++++++++++++++++++-------------
> 1 file changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
> index 87c5b22710..92037e9070 100644
> --- a/daemon/libvirtd.c
> +++ b/daemon/libvirtd.c
> @@ -1524,9 +1524,35 @@ int main(int argc, char **argv) {
> 0, "shutdown", NULL, NULL);
>
> cleanup:
> - virNetlinkEventServiceStopAll();
> + /* NB: Order for cleanup should attempt to kept in the inverse order
> + * was was used to create/start the daemon - there are some fairly
> + * important reliances built into the startup processing that use
> + * refcnt's in order to manage objects. Removing too early could
> + * cause crashes. */
^Not a very useful commentary, more suitable for the commit message - so I
preferred if you'd drop it from here.
> virNetDaemonClose(dmn);
> +
> + virNetlinkEventServiceStopAll();
> +
> + if (driversInitialized) {
> + /* Set via daemonRunStateInit thread in daemonStateInit.
> + * NB: It is possible that virNetlinkEventServerStart fails
> + * and we jump to cleanup before driversInitialized has
> + * been set. That could leave things inconsistent; however,
> + * resolution of that possibility is perhaps more trouble than
> + * it's worth to handle. */
True, I guess, nevertheless it's not very useful either...
...
> + virObjectUnref(dmn);
Why ^here? Just because we're doing the cleanup the exact opposite way? The
approach is right, but I think in general cleanup routines should be run first
followed by releasing all the objects, so this should stay where it is right
now - at the very end.
I agree with the rest of the hunks.
Reviewed-by: Erik Skultety <eskultet at redhat.com>
More information about the libvir-list
mailing list