From: Christian Brauner Date: Sat, 23 Dec 2017 12:25:44 +0000 (+0100) Subject: console: adapt lxc_console_mainloop_add() X-Git-Tag: lxc-2.0.10~417 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd543fe0229cbe339dd428cf7ffa2b6fc62af490;p=thirdparty%2Flxc.git console: adapt lxc_console_mainloop_add() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/console.c b/src/lxc/console.c index 81e1f37e0..a98762893 100644 --- a/src/lxc/console.c +++ b/src/lxc/console.c @@ -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); diff --git a/src/lxc/console.h b/src/lxc/console.h index dcdf364c4..5b79b2c9f 100644 --- a/src/lxc/console.h +++ b/src/lxc/console.h @@ -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. diff --git a/src/lxc/start.c b/src/lxc/start.c index 474a20e71..7d6929d17 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -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); diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c index 466c6350e..82d67fa92 100644 --- a/src/lxc/tools/lxc_attach.c +++ b/src/lxc/tools/lxc_attach.c @@ -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; }