From: Christian Brauner Date: Sat, 23 Dec 2017 12:25:44 +0000 (+0100) Subject: console: adapt lxc_console_mainloop_add() X-Git-Tag: lxc-3.0.0~104^2~11 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=30a33fbd279c79f5d36266a09b80e02f3a8aab8b;p=mirror_lxc.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 aceaa4509..2f107b5e6 100644 --- a/src/lxc/console.c +++ b/src/lxc/console.c @@ -285,31 +285,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 bd54ed3bb..b456746e4 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 a66881e56..c12728d61 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -468,6 +468,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); @@ -476,10 +477,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); @@ -488,16 +491,20 @@ 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 (has_console) { + struct lxc_console *console = &handler->conf->console; - 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; + 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); @@ -514,15 +521,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 ccd1787df..b5c89270c 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; }