Re: [Openstack] [RFC PATCH] lxc: don't return error on GetInfo when cgroups not yet set up

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Haven't tested this, but I think the following patch should fix the
race, by forcing lxc_driver to hang on lxcMonitorClient() until
after the lxc_controller has set up the cgroups, ensuring that that
happens before the driver is unlocked.

(I'll test tomorrow)

Index: libvirt-0.9.2/src/lxc/lxc_controller.c
===================================================================
--- libvirt-0.9.2.orig/src/lxc/lxc_controller.c	2011-10-02 20:30:23.988539174 -0500
+++ libvirt-0.9.2/src/lxc/lxc_controller.c	2011-10-02 20:30:34.392538998 -0500
@@ -611,7 +611,6 @@
                  unsigned int nveths,
                  char **veths,
                  int monitor,
-                 int client,
                  int appPty)
 {
     int rc = -1;
@@ -622,6 +621,7 @@
     virDomainFSDefPtr root;
     char *devpts = NULL;
     char *devptmx = NULL;
+    int client;
 
     if (socketpair(PF_UNIX, SOCK_STREAM, 0, control) < 0) {
         virReportSystemError(errno, "%s",
@@ -634,6 +634,13 @@
     if (lxcSetContainerResources(def) < 0)
         goto cleanup;
 
+    /* Accept initial client which is the libvirtd daemon */
+    if ((client = accept(monitor, NULL, 0)) < 0) {
+        virReportSystemError(errno, "%s",
+                             _("Failed to accept a connection from driver"));
+        goto cleanup;
+    }
+
     /*
      * If doing a chroot style setup, we need to prepare
      * a private /dev/pts for the child now, which they
@@ -922,14 +929,7 @@
     /* Initialize logging */
     virLogSetFromEnv();
 
-    /* Accept initial client which is the libvirtd daemon */
-    if ((client = accept(monitor, NULL, 0)) < 0) {
-        virReportSystemError(errno, "%s",
-                             _("Failed to accept a connection from driver"));
-        goto cleanup;
-    }
-
-    rc = lxcControllerRun(def, nveths, veths, monitor, client, appPty);
+    rc = lxcControllerRun(def, nveths, veths, monitor, appPty);
 
 
 cleanup:

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]