summaryrefslogtreecommitdiffstats
path: root/PICA_node.c
diff options
context:
space:
mode:
authorAnton <anton@picapica>2019-02-22 23:10:23 +0400
committerAnton <anton@picapica>2019-02-22 23:10:23 +0400
commite7b7f9786eb1b4659f31d714bf84104724321163 (patch)
treed52480934e8a65333ba902497ac324f87db21689 /PICA_node.c
parent51d27219537d640527dd3630ecd26c89c802bc9d (diff)
downloadpica-pica-e7b7f9786eb1b4659f31d714bf84104724321163.tar.gz
pica-pica-e7b7f9786eb1b4659f31d714bf84104724321163.zip
pica-node: bugfix, update next_multi pointer when secondary client is removed
Diffstat (limited to 'PICA_node.c')
-rw-r--r--PICA_node.c19
1 files changed, 18 insertions, 1 deletions
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);