]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
console: adapt lxc_console_mainloop_add()
authorChristian Brauner <christian.brauner@ubuntu.com>
Sat, 23 Dec 2017 12:25:44 +0000 (13:25 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Fri, 19 Jan 2018 13:57:43 +0000 (14:57 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/console.c
src/lxc/console.h
src/lxc/start.c
src/lxc/tools/lxc_attach.c

index 81e1f37e0d2c4d8905169989e2e40baa77038996..a9876289337035a0653a8d4a7798e6ddb508fefd 100644 (file)
@@ -269,31 +269,25 @@ static int lxc_console_mainloop_add_peer(struct lxc_console *console)
        return 0;
 }
 
-extern int lxc_console_mainloop_add(struct lxc_epoll_descr *descr,
-                                   struct lxc_conf *conf)
+int lxc_console_mainloop_add(struct lxc_epoll_descr *descr,
+                            struct lxc_console *console)
 {
        int ret;
-       struct lxc_console *console = &conf->console;
-
-       if (!conf->rootfs.path) {
-               INFO("no rootfs, no console.");
-               return 0;
-       }
 
        if (console->master < 0) {
                INFO("no console");
                return 0;
        }
 
-       if (lxc_mainloop_add_handler(descr, console->master,
-                                    lxc_console_cb_con, console)) {
-               ERROR("failed to add to mainloop console handler for '%d'",
-                     console->master);
+       ret = lxc_mainloop_add_handler(descr, console->master,
+                                      lxc_console_cb_con, console);
+       if (ret < 0) {
+               ERROR("Failed to add handler for %d to mainloop", console->master);
                return -1;
        }
 
-       /* we cache the descr so that we can add an fd to it when someone
-        * does attach to it in lxc_console_allocate()
+       /* We cache the descr so that we can add an fd to it when someone
+        * does attach to it in lxc_console_allocate().
         */
        console->descr = descr;
        ret = lxc_console_mainloop_add_peer(console);
index dcdf364c4acf5f2d223057b3a0dd27406a1510b6..5b79b2c9f0ac969119acb49ec5483f4991cdca2b 100644 (file)
@@ -114,7 +114,7 @@ extern void lxc_console_free(struct lxc_conf *conf, int fd);
 /*
  * Register pty event handlers in an open mainloop
  */
-extern int  lxc_console_mainloop_add(struct lxc_epoll_descr *, struct lxc_conf *);
+extern int  lxc_console_mainloop_add(struct lxc_epoll_descr *, struct lxc_console *);
 
 /*
  * Handle SIGWINCH events on the allocated ptys.
index 474a20e717bfa52c7a363ee1138c561cee6b8baf..7d6929d179da507045ff4694619afa28a399b93f 100644 (file)
@@ -459,6 +459,7 @@ int lxc_set_state(const char *name, struct lxc_handler *handler,
 int lxc_poll(const char *name, struct lxc_handler *handler)
 {
        int ret;
+       bool has_console = (handler->conf->rootfs.path != NULL);
        struct lxc_epoll_descr descr, descr_console;
 
        ret = lxc_mainloop_open(&descr);
@@ -467,10 +468,12 @@ int lxc_poll(const char *name, struct lxc_handler *handler)
                goto out_sigfd;
        }
 
-       ret = lxc_mainloop_open(&descr_console);
-       if (ret < 0) {
-               ERROR("Failed to create console mainloop");
-               goto out_mainloop;
+       if (has_console) {
+               ret = lxc_mainloop_open(&descr_console);
+               if (ret < 0) {
+                       ERROR("Failed to create console mainloop");
+                       goto out_mainloop;
+               }
        }
 
        ret = lxc_mainloop_add_handler(&descr, handler->sigfd, signal_handler, handler);
@@ -479,12 +482,6 @@ int lxc_poll(const char *name, struct lxc_handler *handler)
                goto out_mainloop_console;
        }
 
-       ret = lxc_console_mainloop_add(&descr, handler->conf);
-       if (ret < 0) {
-               ERROR("Failed to add console handlers to mainloop");
-               goto out_mainloop_console;
-       }
-
        if (handler->conf->need_utmp_watch) {
                #if HAVE_LIBCAP
                if (lxc_utmp_mainloop_add(&descr, handler)) {
@@ -495,12 +492,21 @@ int lxc_poll(const char *name, struct lxc_handler *handler)
                        DEBUG("Not starting utmp handler as CAP_SYS_BOOT cannot be dropped without capabilities support.");
                #endif
        }
-       TRACE("lxc mainloop is ready");
 
-       ret = lxc_console_mainloop_add(&descr_console, handler->conf);
-       if (ret < 0) {
-               ERROR("Failed to add console handlers to console mainloop");
-               goto out_mainloop_console;
+       if (has_console) {
+               struct lxc_console *console = &handler->conf->console;
+
+               ret = lxc_console_mainloop_add(&descr, console);
+               if (ret < 0) {
+                       ERROR("Failed to add console handlers to mainloop");
+                       goto out_mainloop_console;
+               }
+
+               ret = lxc_console_mainloop_add(&descr_console, console);
+               if (ret < 0) {
+                       ERROR("Failed to add console handlers to console mainloop");
+                       goto out_mainloop_console;
+               }
        }
 
        ret = lxc_cmd_mainloop_add(name, &descr, handler);
@@ -517,15 +523,19 @@ int lxc_poll(const char *name, struct lxc_handler *handler)
        if (ret < 0 || !handler->init_died)
                goto out_mainloop;
 
-       ret = lxc_mainloop(&descr_console, 0);
+       if (has_console)
+               ret = lxc_mainloop(&descr_console, 0);
+
 
 out_mainloop:
        lxc_mainloop_close(&descr);
        TRACE("Closed mainloop");
 
 out_mainloop_console:
-       lxc_mainloop_close(&descr_console);
-       TRACE("Closed console mainloop");
+       if (has_console) {
+               lxc_mainloop_close(&descr_console);
+               TRACE("Closed console mainloop");
+       }
 
 out_sigfd:
        close(handler->sigfd);
index 466c6350e630efc0136a06bcbf728c2b6fa2bd24..82d67fa927f2afb7da74bc022df760adfa05cac1 100644 (file)
@@ -356,7 +356,7 @@ static int get_pty_on_host(struct lxc_container *c, struct wrapargs *wrap, int *
                goto err2;
        }
 
-       if (lxc_console_mainloop_add(&descr, conf) < 0) {
+       if (lxc_console_mainloop_add(&descr, &conf->console) < 0) {
                fprintf(stderr, "Failed to add handlers to lxc mainloop.\n");
                goto err3;
        }