]> git.proxmox.com Git - mirror_lxc.git/commitdiff
cgmanager: tell dbus to do locking
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Thu, 6 Mar 2014 16:23:17 +0000 (10:23 -0600)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Thu, 6 Mar 2014 16:23:17 +0000 (10:23 -0600)
Thanks to S.Çağlar for figuring out that we needed this!

Also fix a memory leak found by coverity.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/cgmanager.c

index e7407d8d0e4c3c286485e358996df91bdc7cfefb..c80a136e5d6665a2b627854005a9e6d22ca4e932 100644 (file)
@@ -79,6 +79,7 @@ static bool cgm_keep_connection = false;
 static struct cgroup_ops cgmanager_ops;
 static int nr_subsystems;
 static char **subsystems;
+static bool dbus_threads_initialized = false;
 
 static void cgm_dbus_disconnect(void)
 {
@@ -95,6 +96,13 @@ static void cgm_dbus_disconnect(void)
 static bool do_cgm_dbus_connect(void)
 {
        DBusError dbus_error;
+
+       if (!dbus_threads_initialized) {
+               // tell dbus to do struct locking for thread safety
+               dbus_threads_init_default();
+               dbus_threads_initialized = true;
+       }
+
        dbus_error_init(&dbus_error);
 
        connection = nih_dbus_connect(CGMANAGER_DBUS_SOCK, NULL);
@@ -935,6 +943,7 @@ static bool cgm_attach(const char *name, const char *lxcpath, pid_t pid)
        }
        if (!cgm_dbus_connect()) {
                ERROR("Error connecting to cgroup manager");
+               lxc_container_put(c);
                return false;
        }
        // cgm_create makes sure that we have the same cgroup name for all