diff options
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 32 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 27 | 
2 files changed, 23 insertions, 36 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 6cdba9ea6d1..d6dbf7604c3 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -2630,27 +2630,8 @@ notify (xlator_t *this, int32_t event,          switch (event)          {          case GF_EVENT_CHILD_UP: - -#ifndef GF_DARWIN_HOST_OS -		/*  -		 * This is because macfuse sends statfs() once the fuse thread -                 * gets activated, and by that time if the client is not  -		 * connected, it give 'Device not configured' error. Hence,  -		 * create thread only when client sends CHILD_UP (ie, client  -		 * is connected). -		 */ - -                /* TODO: somehow, try to get the mountpoint active as soon as  -		 * init() is complete, so that the hang effect when the  -		 * server is not not started is removed.  -		 */ -		 -		/* This code causes problem with 'automount' too */ -		/* case GF_EVENT_CHILD_CONNECTING: */ -#endif /* DARWIN */ - +        case GF_EVENT_CHILD_CONNECTING:           { -                  if (!private->fuse_thread_started)                  {                          private->fuse_thread_started = 1; @@ -2658,10 +2639,15 @@ notify (xlator_t *this, int32_t event,                          ret = pthread_create (&private->fuse_thread, NULL,                                                fuse_thread_proc, this); -                        if (ret != 0) +                        if (ret != 0) {                                  gf_log ("glusterfs-fuse", GF_LOG_ERROR, -                                        "pthread_create() failed (%s)", strerror (errno)); -                        assert (ret == 0); +                                        "pthread_create() failed (%s)",  +                                        strerror (errno)); + +                                /* If fuse thread is not started, that means,  +                                   its hung, we can't use this process. */ +                                raise (SIGTERM); +                        }                  }                  break;          } diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index 11e66983324..5212d67c6e6 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -5956,6 +5956,20 @@ client_setvolume_cbk (call_frame_t *frame,  	}  out: +        if (-1 == op_ret) { +		/* Let the connection/re-connection happen in  +		 * background, for now, don't hang here, +		 * tell the parents that i am all ok.. +		 */ +		parent = trans->xl->parents; +		while (parent) { +			parent->xlator->notify (parent->xlator, +						GF_EVENT_CHILD_CONNECTING, +						trans->xl); +			parent = parent->next; +		} +        } +  	STACK_DESTROY (frame->root);  	if (reply) @@ -6608,7 +6622,6 @@ notify (xlator_t *this,  	case GF_EVENT_PARENT_UP:  	{ -		xlator_list_t *parent = NULL;  		client_conf_t *conf = NULL;  		int            i = 0;  		transport_t   *trans = NULL; @@ -6630,18 +6643,6 @@ notify (xlator_t *this,  			client_protocol_reconnect (trans);  		} - -		/* Let the connection/re-connection happen in  -		 * background, for now, don't hang here, -		 * tell the parents that i am all ok.. -		 */ -		parent = trans->xl->parents; -		while (parent) { -			parent->xlator->notify (parent->xlator, -						GF_EVENT_CHILD_CONNECTING, -						trans->xl); -			parent = parent->next; -		}  	}  	break;  | 
