diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index fe25f8235e..010ebf4e74 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -66,6 +66,9 @@ struct _udevEventData { virCond threadCond; bool threadQuit; bool dataReady; + + /* init thread */ + virThread initThread; }; static virClassPtr udevEventDataClass; @@ -1660,6 +1663,7 @@ nodeStateCleanup(void) priv->threadQuit = true; virCondSignal(&priv->threadCond); virObjectUnlock(priv); + virThreadJoin(&priv->initThread); virThreadJoin(&priv->th); } @@ -1995,7 +1999,6 @@ nodeStateInitialize(bool privileged, { udevEventDataPtr priv = NULL; struct udev *udev = NULL; - virThread enumThread; if (root != NULL) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -2103,7 +2106,7 @@ nodeStateInitialize(bool privileged, if (udevSetupSystemDev() != 0) goto cleanup; - if (virThreadCreateFull(&enumThread, false, nodeStateInitializeEnumerate, + if (virThreadCreateFull(&priv->initThread, true, nodeStateInitializeEnumerate, "nodedev-init", false, udev) < 0) { virReportSystemError(errno, "%s", _("failed to create udev enumerate thread"));