mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-06 12:18:35 +00:00
console: adapt lxc_console_mainloop_add()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
b75c344c24
commit
30a33fbd27
@ -285,31 +285,25 @@ static int lxc_console_mainloop_add_peer(struct lxc_console *console)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int lxc_console_mainloop_add(struct lxc_epoll_descr *descr,
|
int lxc_console_mainloop_add(struct lxc_epoll_descr *descr,
|
||||||
struct lxc_conf *conf)
|
struct lxc_console *console)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct lxc_console *console = &conf->console;
|
|
||||||
|
|
||||||
if (!conf->rootfs.path) {
|
|
||||||
INFO("no rootfs, no console.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (console->master < 0) {
|
if (console->master < 0) {
|
||||||
INFO("no console");
|
INFO("no console");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lxc_mainloop_add_handler(descr, console->master,
|
ret = lxc_mainloop_add_handler(descr, console->master,
|
||||||
lxc_console_cb_con, console)) {
|
lxc_console_cb_con, console);
|
||||||
ERROR("failed to add to mainloop console handler for '%d'",
|
if (ret < 0) {
|
||||||
console->master);
|
ERROR("Failed to add handler for %d to mainloop", console->master);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we cache the descr so that we can add an fd to it when someone
|
/* We cache the descr so that we can add an fd to it when someone
|
||||||
* does attach to it in lxc_console_allocate()
|
* does attach to it in lxc_console_allocate().
|
||||||
*/
|
*/
|
||||||
console->descr = descr;
|
console->descr = descr;
|
||||||
ret = lxc_console_mainloop_add_peer(console);
|
ret = lxc_console_mainloop_add_peer(console);
|
||||||
|
@ -114,7 +114,7 @@ extern void lxc_console_free(struct lxc_conf *conf, int fd);
|
|||||||
/*
|
/*
|
||||||
* Register pty event handlers in an open mainloop
|
* 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.
|
* Handle SIGWINCH events on the allocated ptys.
|
||||||
|
@ -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 lxc_poll(const char *name, struct lxc_handler *handler)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
bool has_console = (handler->conf->rootfs.path != NULL);
|
||||||
struct lxc_epoll_descr descr, descr_console;
|
struct lxc_epoll_descr descr, descr_console;
|
||||||
|
|
||||||
ret = lxc_mainloop_open(&descr);
|
ret = lxc_mainloop_open(&descr);
|
||||||
@ -476,10 +477,12 @@ int lxc_poll(const char *name, struct lxc_handler *handler)
|
|||||||
goto out_sigfd;
|
goto out_sigfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = lxc_mainloop_open(&descr_console);
|
if (has_console) {
|
||||||
if (ret < 0) {
|
ret = lxc_mainloop_open(&descr_console);
|
||||||
ERROR("Failed to create console mainloop");
|
if (ret < 0) {
|
||||||
goto out_mainloop;
|
ERROR("Failed to create console mainloop");
|
||||||
|
goto out_mainloop;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = lxc_mainloop_add_handler(&descr, handler->sigfd, signal_handler, handler);
|
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;
|
goto out_mainloop_console;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = lxc_console_mainloop_add(&descr, handler->conf);
|
if (has_console) {
|
||||||
if (ret < 0) {
|
struct lxc_console *console = &handler->conf->console;
|
||||||
ERROR("Failed to add console handlers to mainloop");
|
|
||||||
goto out_mainloop_console;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = lxc_console_mainloop_add(&descr_console, handler->conf);
|
ret = lxc_console_mainloop_add(&descr, console);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ERROR("Failed to add console handlers to console mainloop");
|
ERROR("Failed to add console handlers to mainloop");
|
||||||
goto out_mainloop_console;
|
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);
|
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)
|
if (ret < 0 || !handler->init_died)
|
||||||
goto out_mainloop;
|
goto out_mainloop;
|
||||||
|
|
||||||
ret = lxc_mainloop(&descr_console, 0);
|
if (has_console)
|
||||||
|
ret = lxc_mainloop(&descr_console, 0);
|
||||||
|
|
||||||
|
|
||||||
out_mainloop:
|
out_mainloop:
|
||||||
lxc_mainloop_close(&descr);
|
lxc_mainloop_close(&descr);
|
||||||
TRACE("Closed mainloop");
|
TRACE("Closed mainloop");
|
||||||
|
|
||||||
out_mainloop_console:
|
out_mainloop_console:
|
||||||
lxc_mainloop_close(&descr_console);
|
if (has_console) {
|
||||||
TRACE("Closed console mainloop");
|
lxc_mainloop_close(&descr_console);
|
||||||
|
TRACE("Closed console mainloop");
|
||||||
|
}
|
||||||
|
|
||||||
out_sigfd:
|
out_sigfd:
|
||||||
close(handler->sigfd);
|
close(handler->sigfd);
|
||||||
|
@ -356,7 +356,7 @@ static int get_pty_on_host(struct lxc_container *c, struct wrapargs *wrap, int *
|
|||||||
goto err2;
|
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");
|
fprintf(stderr, "Failed to add handlers to lxc mainloop.\n");
|
||||||
goto err3;
|
goto err3;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user