From: Liu Yuan <tailai.ly at taobao.com> Let's differentiate between find_node() and find_entry_*() Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- sheep/group.c | 30 ++++++++++++++++-------------- 1 files changed, 16 insertions(+), 14 deletions(-) diff --git a/sheep/group.c b/sheep/group.c index 790f844..812f6a0 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -424,14 +424,14 @@ static int get_nodes_nr_epoch(int epoch) return nr; } -static struct node *find_leave_node(struct node *node) +static struct sheepdog_node_list_entry *find_entry_list(struct sheepdog_node_list_entry *entry, + struct list_head *head) { struct node *n; - list_for_each_entry(n, &sys->leave_list, list) { - if (node_cmp(&n->ent, &node->ent) == 0) - return n; - dprintf("%d\n", node_cmp(&n->ent, &node->ent)); - } + list_for_each_entry(n, head, list) + if (node_cmp(&n->ent, entry) == 0) + return entry; + return NULL; } @@ -450,14 +450,15 @@ static int add_node_to_leave_list(struct message_header *msg) goto err; } - n->nodeid = msg->nodeid; - n->pid = msg->pid; - n->ent = msg->from; - if (find_leave_node(n)) { + if (find_entry_list(&msg->from, &sys->leave_list)) { free(n); goto ret; } + n->nodeid = msg->nodeid; + n->pid = msg->pid; + n->ent = msg->from; + list_add_tail(&n->list, &sys->leave_list); goto ret; } else if (msg->op == SD_MSG_JOIN ) { @@ -470,14 +471,15 @@ static int add_node_to_leave_list(struct message_header *msg) goto free; } - n->nodeid = jm->leave_nodes[i].nodeid; - n->pid = jm->leave_nodes[i].pid; - n->ent = jm->leave_nodes[i].ent; - if (find_leave_node(n)) { + if (find_entry_list(&jm->leave_nodes[i].ent, &sys->leave_list)) { free(n); continue; } + n->nodeid = jm->leave_nodes[i].nodeid; + n->pid = jm->leave_nodes[i].pid; + n->ent = jm->leave_nodes[i].ent; + list_add_tail(&n->list, &tmp_list); } list_splice_init(&tmp_list, &sys->leave_list); -- 1.7.6.1 |