This fixes a regression in "cluster/local: process multiple events in local_handler"
after that patch we may busy loop under the shared memory area lock when waiting for a join request to be answered, or when another blocking even arrives while one is already beeing processed. Signed-off-by: Christoph Hellwig <[email protected]> --- sheep/cluster/local.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) Index: sheepdog/sheep/cluster/local.c =================================================================== --- sheepdog.orig/sheep/cluster/local.c 2012-07-10 16:59:19.716666233 +0200 +++ sheepdog/sheep/cluster/local.c 2012-07-10 17:01:29.313332120 +0200 @@ -355,7 +355,7 @@ static bool local_process_event(void) switch (ev->type) { case EVENT_JOIN_REQUEST: if (!node_eq(&ev->nodes[0], &this_node)) - break; + return false; res = sd_check_join_cb(&ev->sender, ev->buf); ev->join_result = res; @@ -370,7 +370,7 @@ static bool local_process_event(void) shm_queue_unlock(); exit(1); } - break; + return false; case EVENT_JOIN_RESPONSE: if (ev->join_result == CJ_RES_MASTER_TRANSFER) { /* FIXME: This code is tricky, but Sheepdog assumes that */ @@ -391,9 +391,8 @@ static bool local_process_event(void) shm_queue_pop(); break; case EVENT_BLOCK: - if (!sd_block_handler(&ev->sender)) - return false; - break; + sd_block_handler(&ev->sender); + return false; case EVENT_NOTIFY: sd_notify_handler(&ev->sender, ev->buf, ev->buf_len); shm_queue_pop(); -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
