From: Yunkai Zhang <qiushu.zyk at taobao.com> Please see the previous patch's description. Signed-off-by: Yunkai Zhang <qiushu.zyk at taobao.com> --- sheep/cluster/accord.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sheep/cluster/accord.c b/sheep/cluster/accord.c index a0f1d00..91ee3b2 100644 --- a/sheep/cluster/accord.c +++ b/sheep/cluster/accord.c @@ -48,6 +48,7 @@ struct acrd_event { enum cluster_join_result join_result; }; +static int accord_notify_blocked; static struct sd_node this_node; static uint64_t this_id; @@ -125,6 +126,8 @@ static void acrd_unlock(struct acrd_handle *ah) rc = acrd_del(ah, LOCK_FILE, 0); if (rc != ACRD_SUCCESS) panic("failed to release lock\n"); + + accord_notify_blocked = 0; } @@ -468,6 +471,9 @@ static void acrd_handler(int listen_fd, int events, void *data) if (ret < 0) return; + if (accord_notify_blocked) + return; + pthread_mutex_lock(&queue_lock); ret = acrd_queue_pop(ahandle, &ev); @@ -511,7 +517,8 @@ static void acrd_handler(int listen_fd, int events, void *data) break; case EVENT_BLOCK: acrd_queue_push_back(ahandle, NULL); - sd_block_handler(&ev.sender); + if (sd_block_handler(&ev.sender)) + accord_notify_blocked = 1; break; case EVENT_NOTIFY: sd_notify_handler(&ev.sender, ev.buf, ev.buf_len); -- 1.7.10.4 |