Quoting S.Çağlar Onur (cag...@10ur.org): > Signed-off-by: S.Çağlar Onur <cag...@10ur.org>
Thanks. Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> > --- > src/lxc/lxclock.c | 74 > +++++++++++++++++++++++++++++++++++++++++++++---------- > src/lxc/lxclock.h | 3 +++ > src/lxc/utils.c | 57 +----------------------------------------- > 3 files changed, 65 insertions(+), 69 deletions(-) > > diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c > index 3857ff0..64823d2 100644 > --- a/src/lxc/lxclock.c > +++ b/src/lxc/lxclock.c > @@ -31,6 +31,10 @@ > #include <lxc/log.h> > #include <lxc/lxccontainer.h> > > +#ifdef MUTEX_DEBUGGING > +#include <execinfo.h> > +#endif > + > #define OFLAG (O_CREAT | O_RDWR) > #define SEMMODE 0660 > #define SEMVALUE 1 > @@ -40,10 +44,55 @@ lxc_log_define(lxc_lock, lxc); > > #ifdef MUTEX_DEBUGGING > pthread_mutex_t thread_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; > +pthread_mutex_t static_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; > + > +inline void dump_stacktrace(void) > +{ > + void *array[MAX_STACKDEPTH]; > + size_t size; > + char **strings; > + size_t i; > + > + size = backtrace(array, MAX_STACKDEPTH); > + strings = backtrace_symbols(array, size); > + > + // Using fprintf here as our logging module is not thread safe > + fprintf(stderr, "\tObtained %zd stack frames.\n", size); > + > + for (i = 0; i < size; i++) > + fprintf(stderr, "\t\t%s\n", strings[i]); > + > + free (strings); > +} > #else > pthread_mutex_t thread_mutex = PTHREAD_MUTEX_INITIALIZER; > +pthread_mutex_t static_mutex = PTHREAD_MUTEX_INITIALIZER; > + > +inline void dump_stacktrace(void) {;} > #endif > > +void lock_mutex(pthread_mutex_t *l) > +{ > + int ret; > + > + if ((ret = pthread_mutex_lock(l)) != 0) { > + fprintf(stderr, "pthread_mutex_lock returned:%d %s", ret, > strerror(ret)); > + dump_stacktrace(); > + exit(1); > + } > +} > + > +void unlock_mutex(pthread_mutex_t *l) > +{ > + int ret; > + > + if ((ret = pthread_mutex_unlock(l)) != 0) { > + fprintf(stderr, "pthread_mutex_lock returned:%d %s", ret, > strerror(ret)); > + dump_stacktrace(); > + exit(1); > + } > +} > + > static char *lxclock_name(const char *p, const char *n) > { > int ret; > @@ -267,24 +316,23 @@ void lxc_putlock(struct lxc_lock *l) > > void process_lock(void) > { > - int ret; > - > - if ((ret = pthread_mutex_lock(&thread_mutex)) != 0) { > - ERROR("pthread_mutex_lock returned:%d %s", ret, strerror(ret)); > - dump_stacktrace(); > - exit(1); > - } > + lock_mutex(&thread_mutex); > } > > void process_unlock(void) > { > - int ret; > + unlock_mutex(&thread_mutex); > +} > > - if ((ret = pthread_mutex_unlock(&thread_mutex)) != 0) { > - ERROR("pthread_mutex_unlock returned:%d %s", ret, > strerror(ret)); > - dump_stacktrace(); > - exit(1); > - } > +/* Protects static const values inside the lxc_global_config_value funtion */ > +void static_lock(void) > +{ > + lock_mutex(&static_mutex); > +} > + > +void static_unlock(void) > +{ > + unlock_mutex(&static_mutex); > } > > int container_mem_lock(struct lxc_container *c) > diff --git a/src/lxc/lxclock.h b/src/lxc/lxclock.h > index dcdf79d..12ba827 100644 > --- a/src/lxc/lxclock.h > +++ b/src/lxc/lxclock.h > @@ -87,6 +87,9 @@ extern void lxc_putlock(struct lxc_lock *l); > > extern void process_lock(void); > extern void process_unlock(void); > +extern void static_lock(void); > +extern void static_unlock(void); > + > struct lxc_container; > extern int container_mem_lock(struct lxc_container *c); > extern void container_mem_unlock(struct lxc_container *c); > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index 4bc2c35..3fab9ae 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -39,11 +39,6 @@ > #include <sys/types.h> > #include <sys/wait.h> > #include <assert.h> > -#include <pthread.h> > - > -#ifdef MUTEX_DEBUGGING > -#include <execinfo.h> > -#endif > > #ifndef HAVE_GETLINE > #ifdef HAVE_FGETLN > @@ -59,57 +54,6 @@ > > lxc_log_define(lxc_utils, lxc); > > - > -#ifdef MUTEX_DEBUGGING > -static pthread_mutex_t static_mutex = > PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; > - > -inline void dump_stacktrace(void) > -{ > - void *array[MAX_STACKDEPTH]; > - size_t size; > - char **strings; > - size_t i; > - > - size = backtrace(array, MAX_STACKDEPTH); > - strings = backtrace_symbols(array, size); > - > - // Using fprintf here as our logging module is not thread safe > - fprintf(stderr, "\tObtained %zd stack frames.\n", size); > - > - for (i = 0; i < size; i++) > - fprintf(stderr, "\t\t%s\n", strings[i]); > - > - free (strings); > -} > -#else > -static pthread_mutex_t static_mutex = PTHREAD_MUTEX_INITIALIZER; > - > -inline void dump_stacktrace(void) {;} > -#endif > - > -/* Protects static const values inside the lxc_global_config_value funtion */ > -static void static_lock(void) > -{ > - int ret; > - > - if ((ret = pthread_mutex_lock(&static_mutex)) != 0) { > - ERROR("pthread_mutex_lock returned:%d %s", ret, strerror(ret)); > - dump_stacktrace(); > - exit(1); > - } > -} > - > -static void static_unlock(void) > -{ > - int ret; > - > - if ((ret = pthread_mutex_unlock(&static_mutex)) != 0) { > - ERROR("pthread_mutex_unlock returned:%d %s", ret, > strerror(ret)); > - dump_stacktrace(); > - exit(1); > - } > -} > - > static int _recursive_rmdir_onedev(char *dirname, dev_t pdev) > { > struct dirent dirent, *direntp; > @@ -392,6 +336,7 @@ out: > if (fin) > fclose(fin); > process_unlock(); > + > static_lock(); > value = values[i]; > static_unlock(); > -- > 1.8.3.2 > > > ------------------------------------------------------------------------------ > DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps > OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access > Free app hosting. Or install the open source package on any LAMP server. > Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native! > http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel ------------------------------------------------------------------------------ DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access Free app hosting. Or install the open source package on any LAMP server. Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native! http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel