if dbus_pending_call_get_completed(pendingReply) is true, then virNetDaemonGotInhibitReply is called directly which attempts to re-lock the same mutex from the same thread (its locked one frame above) resulting in the thread dead-locking itself.
Obviously this is not always true, so sometimes the call to virNetDaemonGotInhibitReply is deferred, where the mutex lock *is* appropriate in virNetDaemonGotInhibitReply.
Specifically this behavioural change we think is the cause:
if (dbus_pending_ call_get_ completed( pendingReply) ) {
virNetDaem onGotInhibitRep ly(pendingReply , dmn);
dbus_ pending_ call_set_ notify( pendingReply,
virNetDae monGotInhibitRe ply,
dmn, NULL);
} else {
}
if dbus_pending_ call_get_ completed( pendingReply) is true, then virNetDaemonGot InhibitReply is called directly which attempts to re-lock the same mutex from the same thread (its locked one frame above) resulting in the thread dead-locking itself.
Obviously this is not always true, so sometimes the call to virNetDaemonGot InhibitReply is deferred, where the mutex lock *is* appropriate in virNetDaemonGot InhibitReply.
This is new in 3.6.0.