From e7b7f9786eb1b4659f31d714bf84104724321163 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 22 Feb 2019 23:10:23 +0400 Subject: pica-node: bugfix, update next_multi pointer when secondary client is removed --- PICA_node.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'PICA_node.c') diff --git a/PICA_node.c b/PICA_node.c index ceafd7c..08c8808 100644 --- a/PICA_node.c +++ b/PICA_node.c @@ -1973,6 +1973,8 @@ void client_tree_replace_multi(struct client *primary) void client_list_delete(struct client* ci) { + struct client *s; + PICA_debug1("client_list_delete(%p)", (void*)ci); SSL_free(ci->ssl_comm); //удаление из списка @@ -1987,7 +1989,9 @@ void client_list_delete(struct client* ci) client_list_end = ci->prev; //удаление из дерева - if (client_tree_search(ci->id) == ci) + s = client_tree_search(ci->id); + + if (s == ci) { if (ci->next_multi) client_tree_replace_multi(ci); @@ -1995,6 +1999,19 @@ void client_list_delete(struct client* ci) client_tree_remove(ci); client_tree_print(client_tree_root); } + else if (s) + { + while(s) + { + if (s->next_multi == ci) + { + s->next_multi = ci->next_multi; + break; + } + + s = s->next_multi; + } + } cclink_list_delete_by_client(ci); -- cgit v1.2.1