OK, that is the problem.

in src/util/cgmanager.c, we are calling cgm_dbus_connect() from multiple 
threads.
it in turn assigns 'cgroup_manager'.
but this is a global (static) var. So the threads fight over it, and corrupt.


static NihDBusProxy *cgroup_manager = NULL;
bool cgm_running = false;

VIR_LOG_INIT("util.cgmanager");

#define CGMANAGER_DBUS_SOCK "unix:path=/sys/fs/cgroup/cgmanager/sock"
bool cgm_dbus_connect(void)
{
    DBusError dbus_error;
    DBusConnection *connection;
    dbus_error_init(&dbus_error);

    connection = dbus_connection_open_private(CGMANAGER_DBUS_SOCK, &dbus_error);
    if (!connection) {
        dbus_error_free(&dbus_error);
        return false;
    }

    dbus_connection_set_exit_on_disconnect(connection, FALSE);
    dbus_error_free(&dbus_error);
    cgroup_manager = nih_dbus_proxy_new(NULL, connection,
                NULL /* p2p */,
                "/org/linuxcontainers/cgmanager", NULL, NULL);
    dbus_connection_unref(connection);
    if (!cgroup_manager) {
        NihError *nerr;
        nerr = nih_error_get();
        VIR_ERROR("cgmanager: Error opening proxy: %s", nerr->message);
        nih_free(nerr);
        return false;
    }

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1367702

Title:
  libvirt-bin terminated unexpectedly

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1367702/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to