diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/options.c | 2 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 17 | ||||
-rw-r--r-- | libglusterfs/src/xlator.h | 3 |
3 files changed, 22 insertions, 0 deletions
diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c index 53bd779861c..a28f3b7ea4f 100644 --- a/libglusterfs/src/options.c +++ b/libglusterfs/src/options.c @@ -1107,7 +1107,9 @@ xlator_reconfigure_rec (xlator_t *old_xl, xlator_t *new_xl) old_THIS = THIS; THIS = old_xl; + xlator_init_lock (); ret = old_xl->reconfigure (old_xl, new_xl->options); + xlator_init_unlock (); THIS = old_THIS; diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 3c1cde50fa0..2edebc0aec2 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -25,6 +25,21 @@ xl->cbks->fn = default_##fn; \ } while (0) +pthread_mutex_t xlator_init_mutex = PTHREAD_MUTEX_INITIALIZER; + +void +xlator_init_lock (void) +{ + (void) pthread_mutex_lock (&xlator_init_mutex); +} + + +void +xlator_init_unlock (void) +{ + (void) pthread_mutex_unlock (&xlator_init_mutex); +} + static void fill_defaults (xlator_t *xl) @@ -400,7 +415,9 @@ __xlator_init(xlator_t *xl) old_THIS = THIS; THIS = xl; + xlator_init_lock (); ret = xl->init (xl); + xlator_init_unlock (); THIS = old_THIS; diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index b11d1a96f32..e28790cc034 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -1048,4 +1048,7 @@ glusterfs_reachable_leaves(xlator_t *base, dict_t *leaves); int xlator_subvolume_count (xlator_t *this); +void xlator_init_lock (void); +void xlator_init_unlock (void); + #endif /* _XLATOR_H */ |