Patchwork [BUG:3091] mnt/fuse: Do a pthread_cond_broadcast for both CHILD_UP and CHILD_DOWN events.

login
register
Submitter Raghavendra G
Date 2011-07-01 05:42:35
Message ID <20110701054235.GA9665@shell.gluster.com>
Download mbox | patch
Permalink /patch/7706/
State Accepted
Headers show

Comments

Raghavendra G - 2011-07-01 05:42:35
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
---
 xlators/mount/fuse/src/fuse-bridge.c |   11 ++++++-----
 xlators/mount/fuse/src/fuse-bridge.h |    2 +-
 2 files changed, 7 insertions(+), 6 deletions(-)

Patch

diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 875b89f..7007828 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -3039,7 +3039,7 @@  fuse_graph_sync (xlator_t *this)
                 priv->next_graph = NULL;
                 need_first_lookup = 1;
 
-                while (!priv->child_up) {
+                while (!priv->event_recvd) {
                         ret = pthread_cond_wait (&priv->sync_cond,
                                                  &priv->sync_mutex);
                         if (ret != 0) {
@@ -3301,7 +3301,7 @@  fuse_graph_setup (xlator_t *this, glusterfs_graph_t *graph)
         pthread_mutex_lock (&priv->sync_mutex);
         {
                 priv->next_graph = graph;
-                priv->child_up = 0;
+                priv->event_recvd = 0;
 
                 pthread_cond_signal (&priv->sync_cond);
         }
@@ -3344,10 +3344,11 @@  notify (xlator_t *this, int32_t event, void *data, ...)
                                         "failed to setup the graph");
                 }
 
-                if (event == GF_EVENT_CHILD_UP) {
+                if ((event == GF_EVENT_CHILD_UP)
+                    || (event == GF_EVENT_CHILD_DOWN)) {
                         pthread_mutex_lock (&private->sync_mutex);
                         {
-                                private->child_up = 1;
+                                private->event_recvd = 1;
                                 pthread_cond_broadcast (&private->sync_cond);
                         }
                         pthread_mutex_unlock (&private->sync_mutex);
@@ -3647,7 +3648,7 @@  init (xlator_t *this_xl)
         pthread_mutex_init (&priv->fuse_dump_mutex, NULL);
         pthread_cond_init (&priv->sync_cond, NULL);
         pthread_mutex_init (&priv->sync_mutex, NULL);
-        priv->child_up = 0;
+        priv->event_recvd = 0;
 
         for (i = 0; i < FUSE_OP_HIGH; i++) {
                 if (!fuse_std_ops[i])
diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h
index 98f0005..b1e7637 100644
--- a/xlators/mount/fuse/src/fuse-bridge.h
+++ b/xlators/mount/fuse/src/fuse-bridge.h
@@ -91,7 +91,7 @@  struct fuse_private {
 
         pthread_cond_t       sync_cond;
         pthread_mutex_t      sync_mutex;
-        char                 child_up;
+        char                 event_recvd;
 
         char                 init_recvd;