Comment 10 for bug 1714254

Revision history for this message
James Page (james-page) wrote :

Specifically this behavioural change we think is the cause:

        if (dbus_pending_call_get_completed(pendingReply)) {
            virNetDaemonGotInhibitReply(pendingReply, dmn);
        } else {
            dbus_pending_call_set_notify(pendingReply,
                                         virNetDaemonGotInhibitReply,
                                         dmn, NULL);
        }

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.

This is new in 3.6.0.