diff options
| author | Anton <anton@picapica> | 2019-02-22 23:10:23 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2019-02-22 23:10:23 +0400 |
| commit | e7b7f9786eb1b4659f31d714bf84104724321163 (patch) | |
| tree | d52480934e8a65333ba902497ac324f87db21689 /PICA_node.c | |
| parent | 51d27219537d640527dd3630ecd26c89c802bc9d (diff) | |
| download | pica-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.c | 19 |
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); |
