Index: libvirt-1.2.8/src/util/cgmanager.c
===================================================================
--- libvirt-1.2.8.orig/src/util/cgmanager.c
+++ libvirt-1.2.8/src/util/cgmanager.c
@@ -35,10 +35,12 @@
 #include "viralloc.h"
 #include "virerror.h"
 #include "virlog.h"
+#include "virthread.h"
 #include "cgmanager.h"
 
 static NihDBusProxy *cgroup_manager = NULL;
 bool cgm_running = false;
+static virMutex cgmanager_lock = VIR_MUTEX_INITIALIZER;
 
 VIR_LOG_INIT("util.cgmanager");
 
@@ -49,9 +51,12 @@ bool cgm_dbus_connect(void)
     DBusConnection *connection;
     dbus_error_init(&dbus_error);
 
+    virMutexLock(&cgmanager_lock);
+
     connection = dbus_connection_open_private(CGMANAGER_DBUS_SOCK, &dbus_error);
     if (!connection) {
         dbus_error_free(&dbus_error);
+	virMutexUnlock(&cgmanager_lock);
         return false;
     }
 
@@ -66,6 +71,7 @@ bool cgm_dbus_connect(void)
         nerr = nih_error_get();
         VIR_ERROR("cgmanager: Error opening proxy: %s", nerr->message);
         nih_free(nerr);
+	virMutexUnlock(&cgmanager_lock);
         return false;
     }
 
@@ -77,6 +83,7 @@ bool cgm_dbus_connect(void)
         nih_free(nerr);
         nih_free(cgroup_manager);
         cgroup_manager = NULL;
+	virMutexUnlock(&cgmanager_lock);
         return false;
     }
     cgm_running = true;
@@ -90,6 +97,7 @@ void cgm_dbus_disconnect(void)
         dbus_connection_close(cgroup_manager->connection);
         nih_free(cgroup_manager);
         cgroup_manager = NULL;
+	virMutexUnlock(&cgmanager_lock);
     }
 }
 
