From 4d26d9f598384d7cd49c6238ea4a81b9f4e6f212 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 22 Jun 2008 17:42:40 +0300 Subject: [PATCH] Remove client from expired client list before deleting it --- apps/silcd/command_reply.c | 2 ++ apps/silcd/packet_receive.c | 7 ++++++- apps/silcd/server_util.c | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/silcd/command_reply.c b/apps/silcd/command_reply.c index d7202f27..0b1645ec 100644 --- a/apps/silcd/command_reply.c +++ b/apps/silcd/command_reply.c @@ -152,6 +152,7 @@ silc_server_command_process_error(SilcServerCommandReplyContext cmd, silc_server_remove_from_channels(server, NULL, client, TRUE, NULL, TRUE, FALSE); + silc_dlist_del(server->expired_clients, client); silc_idlist_del_data(client); silc_idlist_del_client(server->global_list, client); } @@ -547,6 +548,7 @@ silc_server_command_reply_whowas_save(SilcServerCommandReplyContext cmd) client = silc_idlist_find_client_by_id(server->global_list, client->id, FALSE, &cache); if (client && !silc_hash_table_count(client->channels)) { + client->data.created = silc_time(); silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); } diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index c8d4068d..73424a68 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -356,6 +356,7 @@ static void silc_server_notify_process(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); break; @@ -1264,6 +1265,7 @@ static void silc_server_notify_process(SilcServer server, silc_server_del_from_watcher_list(server, client); /* Remove the client */ + silc_dlist_del(server->expired_clients, client); silc_idlist_del_data(client); silc_idlist_del_client(local ? server->local_list : server->global_list, client); @@ -1505,6 +1507,7 @@ static void silc_server_notify_process(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); break; @@ -1666,6 +1669,7 @@ static void silc_server_notify_process(SilcServer server, silc_server_remove_from_channels(server, NULL, client, TRUE, NULL, TRUE, FALSE); + silc_dlist_del(server->expired_clients, client); silc_idlist_del_data(client); silc_idlist_del_client(server->global_list, client); } @@ -3717,6 +3721,7 @@ void silc_server_resume_client(SilcServer server, detached_client->data.status &= ~SILC_IDLIST_STATUS_RESUME_RES; detached_client->mode &= ~SILC_UMODE_DETACHED; server->stat.my_detached--; + silc_dlist_del(server->expired_clients, detached_client); /* We are finished - reset resuming client */ detached_client->resuming_client = NULL; @@ -3734,6 +3739,7 @@ void silc_server_resume_client(SilcServer server, silc_server_remove_from_channels(server, NULL, client, FALSE, NULL, FALSE, FALSE); silc_server_del_from_watcher_list(server, client); + silc_dlist_del(server->expired_clients, client); if (!silc_idlist_del_client(server->local_list, client)) silc_idlist_del_client(server->global_list, client); client = detached_client; @@ -3953,7 +3959,6 @@ void silc_server_resume_client(SilcServer server, detached_client->data.status |= SILC_IDLIST_STATUS_RESUMED; detached_client->data.status &= ~SILC_IDLIST_STATUS_LOCAL; silc_dlist_del(server->expired_clients, detached_client); - silc_dlist_del(server->expired_clients, detached_client); /* Check if anyone is watching this client */ if (server->server_type == SILC_ROUTER) diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 274bd0f5..d2fd526c 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -228,6 +228,7 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); } else { @@ -290,6 +291,7 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); } else { @@ -1568,6 +1570,7 @@ void silc_server_kill_client(SilcServer server, } /* Remove remote client */ + silc_dlist_del(server->expired_clients, remote_client); silc_idlist_del_data(remote_client); if (!silc_idlist_del_client(server->global_list, remote_client)) { /* Remove this client from watcher list if it is */ -- 2.24.0