On Mon, Sep 16, 2013 at 02:58:51PM -0500, Serge Hallyn wrote: > Quoting Serge Hallyn (serge.hal...@ubuntu.com): > > pthread_mutex_lock() will only return an error if it was set to > > PTHREAD_MUTEX_ERRORCHECK and we are recursively calling it (and > > would otherwise have deadlocked). If that's the case then log a > > message for future debugging and exit. Trying to "recover" at > > that point is madness. > > Heh, all right this patch doesn't compile. But assuming noone > objects to the spirit of it I'll push one that does compile in > a bit. (It's the base of the more general thread-safety patch > I'm working on)
I'm fine with the idea behind that patch. > > > Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com> > > --- > > src/lxc/console.c | 16 ++++++++-------- > > src/lxc/lxccontainer.c | 12 ++++-------- > > src/lxc/lxclock.c | 6 ++++-- > > src/lxc/lxclock.h | 2 +- > > src/lxc/monitor.c | 2 ++ > > 5 files changed, 19 insertions(+), 19 deletions(-) > > > > diff --git a/src/lxc/console.c b/src/lxc/console.c > > index e35a811..f503f18 100644 > > --- a/src/lxc/console.c > > +++ b/src/lxc/console.c > > @@ -100,16 +100,16 @@ static void lxc_console_winch(struct lxc_tty_state > > *ts) > > > > void lxc_console_sigwinch(int sig) > > { > > - if (process_lock() == 0) { > > - struct lxc_list *it; > > - struct lxc_tty_state *ts; > > + struct lxc_list *it; > > + struct lxc_tty_state *ts; > > > > - lxc_list_for_each(it, &lxc_ttys) { > > - ts = it->elem; > > - lxc_console_winch(ts); > > - } > > - process_unlock(); > > + 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, > > diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c > > index 3c51c4a..bb2f226 100644 > > --- a/src/lxc/lxccontainer.c > > +++ b/src/lxc/lxccontainer.c > > @@ -100,8 +100,7 @@ int ongoing_create(struct lxc_container *c) > > > > if (!file_exists(path)) > > return 0; > > - if (process_lock()) > > - return -1; > > + process_lock(); > > if ((fd = open(path, O_RDWR)) < 0) { > > // give benefit of the doubt > > SYSERROR("Error opening partial file"); > > @@ -138,8 +137,7 @@ int create_partial(struct lxc_container *c) > > ERROR("Error writing partial pathname"); > > return -1; > > } > > - if (process_lock()) > > - return -1; > > + process_lock(); > > if ((fd=open(path, O_RDWR | O_CREAT | O_EXCL, 0755)) < 0) { > > SYSERROR("Erorr creating partial file"); > > process_unlock(); > > @@ -173,8 +171,7 @@ void remove_partial(struct lxc_container *c, int fd) > > ERROR("Error writing partial pathname"); > > return; > > } > > - if (process_lock()) > > - return; > > + process_lock(); > > if (unlink(path) < 0) > > SYSERROR("Error unlink partial file %s", path); > > process_unlock(); > > @@ -546,8 +543,7 @@ static bool lxcapi_start(struct lxc_container *c, int > > useinit, char * const argv > > return false; > > lxc_monitord_spawn(c->config_path); > > > > - if (process_lock()) > > - return false; > > + process_lock(); > > pid_t pid = fork(); > > if (pid < 0) { > > lxc_container_put(c); > > diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c > > index 1d6a86c..3307418 100644 > > --- a/src/lxc/lxclock.c > > +++ b/src/lxc/lxclock.c > > @@ -271,12 +271,14 @@ void lxc_putlock(struct lxc_lock *l) > > free(l); > > } > > > > -int process_lock(void) > > +void process_lock(void) > > { > > int ret; > > ret = pthread_mutex_lock(&thread_mutex); > > - if (ret != 0) > > + if (ret != 0) { > > ERROR("pthread_mutex_lock returned:%d %s", ret, strerror(ret)); > > + exit(1); > > + } > > return ret; > > } > > > > diff --git a/src/lxc/lxclock.h b/src/lxc/lxclock.h > > index fae7e4d..dcdf79d 100644 > > --- a/src/lxc/lxclock.h > > +++ b/src/lxc/lxclock.h > > @@ -85,7 +85,7 @@ extern int lxcunlock(struct lxc_lock *lock); > > > > extern void lxc_putlock(struct lxc_lock *l); > > > > -extern int process_lock(void); > > +extern void process_lock(void); > > extern void process_unlock(void); > > struct lxc_container; > > extern int container_mem_lock(struct lxc_container *c); > > diff --git a/src/lxc/monitor.c b/src/lxc/monitor.c > > index 64e9987..747d6ca 100644 > > --- a/src/lxc/monitor.c > > +++ b/src/lxc/monitor.c > > @@ -187,7 +187,9 @@ int lxc_monitor_open(const char *lxcpath) > > if (lxc_monitor_sock_name(lxcpath, &addr) < 0) > > return -1; > > > > + process_lock(); > > fd = socket(PF_UNIX, SOCK_STREAM, 0); > > + process_unlock(); > > if (fd < 0) { > > ERROR("socket : %s", strerror(errno)); > > return -1; > > -- > > 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 > > ------------------------------------------------------------------------------ > 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 -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: Digital signature
------------------------------------------------------------------------------ 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