From cff9d947cca0bec900c0837850678c226e0d40d4 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 30 Jun 2002 08:03:45 +0000 Subject: [PATCH] Free all cache entries in silc_server_free. --- apps/silcd/server.c | 65 +++++++++++++++++++++++++++++++++++++++- apps/silcd/server_util.c | 2 +- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/apps/silcd/server.c b/apps/silcd/server.c index cde4d750..2c0099dd 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -78,6 +78,9 @@ int silc_server_alloc(SilcServer *new_server) void silc_server_free(SilcServer server) { + SilcIDCacheList list; + SilcIDCacheEntry cache; + if (!server) return; @@ -107,6 +110,66 @@ void silc_server_free(SilcServer server) if (server->id_entry) silc_idlist_del_server(server->local_list, server->id_entry); + /* Delete all channels */ + list = NULL; + if (silc_idcache_get_all(server->local_list->channels, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_channel(server->local_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_channel(server->local_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + list = NULL; + if (silc_idcache_get_all(server->global_list->channels, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_channel(server->global_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_channel(server->global_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + + /* Delete all clients */ + list = NULL; + if (silc_idcache_get_all(server->local_list->clients, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_client(server->local_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_client(server->local_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + list = NULL; + if (silc_idcache_get_all(server->global_list->clients, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_client(server->global_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_client(server->global_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + + /* Delete all servers */ + list = NULL; + if (silc_idcache_get_all(server->local_list->servers, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_server(server->local_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_server(server->local_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + list = NULL; + if (silc_idcache_get_all(server->global_list->servers, &list) && + silc_idcache_list_first(list, &cache)) { + silc_idlist_del_server(server->global_list, cache->context); + while (silc_idcache_list_next(list, &cache)) + silc_idlist_del_server(server->global_list, cache->context); + } + if (list) + silc_idcache_list_free(list); + silc_idcache_free(server->local_list->clients); silc_idcache_free(server->local_list->servers); silc_idcache_free(server->local_list->channels); @@ -459,7 +522,7 @@ SILC_TASK_CALLBACK(silc_server_rehash_close_connection) if (!sock) return; - SILC_LOG_INFO(("Closing connection %s:%d [%s]: connection is unconfigured", + SILC_LOG_INFO(("Connection %s:%d [%s] is unconfigured", sock->hostname, sock->port, (sock->type == SILC_SOCKET_TYPE_UNKNOWN ? "Unknown" : sock->type == SILC_SOCKET_TYPE_CLIENT ? "Client" : diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 74fbc40c..fd6671b8 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -937,7 +937,7 @@ bool silc_server_channel_delete(SilcServer server, SilcHashTableList htl; bool delchan = !(channel->mode & SILC_CHANNEL_MODE_FOUNDER_AUTH); - if (delchan || server->server_shutdown) { + if (delchan) { /* Update statistics */ if (server->server_type == SILC_ROUTER) server->stat.chanclients -= channel->user_count; -- 2.24.0