[PATCH] node_device_udev: fix deadlock joining udev thread under lock

Christopher Johannimloh posted 1 patch 1 week ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20260707100627.159706-1-C.Johannimloh@beckhoff.com
src/node_device/node_device_udev.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
[PATCH] node_device_udev: fix deadlock joining udev thread under lock
Posted by Christopher Johannimloh 1 week ago
From: Christopher Johannimloh <C.Johannimloh@beckhoff.com>

In our CI environment we install and purge all packages we use during
a single test. During testing of libvirtd we observed intermittent hangs
during apt purge of the libvirt packages.

After investigation I found out that the hang is caused by a deadlock
in nodeStateShutdownWait() which joins the udev thread while holding
the lock of the udevEventData object.
The udev thread needs the same lock to make progress and exit, so if the
shutdown thread wins the race for the lock the join can never complete
and the shutdown thread will later be killed by the 30s timeout [1].

[1] https://gitlab.com/libvirt/libvirt/-/blob/364977b94a776230037aa159be55bb95f2a33399/src/rpc/virnetdaemon.c#L118

Fixes: e89d39f5b8f30f0b3284ed2bd71cee1a8a3d707d

Signed-off-by: Christopher Johannimloh <C.Johannimloh@beckhoff.com>
---
 src/node_device/node_device_udev.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 104433fb88..28c8f00361 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -2482,10 +2482,8 @@ nodeStateShutdownWait(void)
     if (!priv)
         return 0;
 
-    VIR_WITH_OBJECT_LOCK_GUARD(priv) {
-        if (priv->udevThread)
-            virThreadJoin(priv->udevThread);
-    }
+    if (priv->udevThread)
+        virThreadJoin(priv->udevThread);
 
     if (priv->workerPool)
         virThreadPoolDrain(priv->workerPool);
-- 
2.47.3




This email contains confidential information. If you have received it in error, you must not read, use, copy or pass on this e-mail or its attachments.
If you have received the e-mail in error, please inform me immediately by reply e-mail and then delete this e-mail from your system. Thank you

Diese E-Mail enthält vertrauliche Informationen. Sollten Sie sie irrtümlich erhalten haben, dürfen Sie diese E-Mail oder ihre Anhänge nicht lesen, verwenden, kopieren oder weitergeben.
Sollten Sie die Mail versehentlich erhalten haben, teilen Sie mir dies bitte umgehend per Antwort-E-Mail mit und löschen Sie diese E-Mail dann aus Ihrem System. Vielen Dank

Beckhoff Automation GmbH & Co. KG 
Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany 
Register court: Guetersloh HRA 7075

DisclaimerID:x9d5u140