From: Yunkai Zhang <[email protected]>

Please see the previous patch's description.

Signed-off-by: Yunkai Zhang <[email protected]>
---
 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

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to