These might be a bit controversial.  The process lock was held
for some long periods of time for tweaking consoles.   These
can deadlock with some of lock holds I introduced recently.  I
would argue that if two threads are fighting over the console,
you're gonna have trouble anyway, and the process locks here
weren't saving us from anything.  If we want to do a console
lock then we should probably introduce a new lock - maybe held
for the duration of a lxc-start with console or a lxc-console.
Actually that's probably a good idea...  But here I just drop
the locks which make lxc-start-ephemeral deadlock.

Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>
---
 src/lxc/console.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/src/lxc/console.c b/src/lxc/console.c
index a32e9cf..78be403 100644
--- a/src/lxc/console.c
+++ b/src/lxc/console.c
@@ -103,13 +103,10 @@ void lxc_console_sigwinch(int sig)
        struct lxc_list *it;
        struct lxc_tty_state *ts;
 
-       process_lock();
-
        lxc_list_for_each(it, &lxc_ttys) {
                ts = it->elem;
                lxc_console_winch(ts);
        }
-       process_unlock();
 }
 
 static int lxc_console_cb_sigwinch_fd(int fd, void *cbdata,
@@ -423,7 +420,6 @@ int lxc_console_allocate(struct lxc_conf *conf, int sockfd, 
int *ttyreq)
        struct lxc_tty_info *tty_info = &conf->tty_info;
        struct lxc_console *console = &conf->console;
 
-       process_lock();
        if (*ttyreq == 0) {
                if (lxc_console_peer_proxy_alloc(console, sockfd) < 0)
                        goto out;
@@ -458,7 +454,6 @@ out_tty:
        tty_info->pty_info[ttynum - 1].busy = sockfd;
        masterfd = tty_info->pty_info[ttynum - 1].master;
 out:
-       process_unlock();
        return masterfd;
 }
 
@@ -476,7 +471,6 @@ void lxc_console_free(struct lxc_conf *conf, int fd)
        struct lxc_tty_info *tty_info = &conf->tty_info;
        struct lxc_console *console = &conf->console;
 
-       process_lock();
        for (i = 0; i < tty_info->nbtty; i++) {
                if (tty_info->pty_info[i].busy == fd)
                        tty_info->pty_info[i].busy = 0;
@@ -486,7 +480,6 @@ void lxc_console_free(struct lxc_conf *conf, int fd)
                lxc_mainloop_del_handler(console->descr, 
console->peerpty.slave);
                lxc_console_peer_proxy_free(console);
        }
-       process_unlock();
 }
 
 static void lxc_console_peer_default(struct lxc_console *console)
@@ -713,9 +706,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
                return -1;
        }
 
-       process_lock();
        ttyfd = lxc_cmd_console(c->name, &ttynum, &masterfd, c->config_path);
-       process_unlock();
        if (ttyfd < 0) {
                ret = ttyfd;
                goto err1;
@@ -770,9 +761,7 @@ int lxc_console(struct lxc_container *c, int ttynum,
                goto err4;
        }
 
-       process_lock();
        ret = lxc_mainloop(&descr, -1);
-       process_unlock();
        if (ret) {
                ERROR("mainloop returned an error");
                goto err4;
-- 
1.8.3.2


------------------------------------------------------------------------------
LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack includes
Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/20/13. 
http://pubads.g.doubleclick.net/gampad/clk?id=58041151&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to