From 6139791549209cc696a5dec20d6607391bda8c92 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Thu, 24 May 2007 12:33:29 +0000 Subject: [PATCH] Do not allow stopping client library before it has been started. Fixed channel and entry deleting. --- lib/silcclient/client.c | 6 ++++++ lib/silcclient/client_entry.c | 26 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/silcclient/client.c b/lib/silcclient/client.c index ab13fd6d..d7942f5f 100644 --- a/lib/silcclient/client.c +++ b/lib/silcclient/client.c @@ -1099,6 +1099,12 @@ void silc_client_stop(SilcClient client, SilcClientStopped stopped, { SILC_LOG_DEBUG(("Stopping client")); + if (!silc_fsm_is_started(&client->internal->fsm)) { + SILC_LOG_WARNING(("Attempting to stop client library before it has been " + "started (silc_client_init not called)")); + return; + } + client->internal->running = (SilcClientRunning)stopped; client->internal->running_context = context; diff --git a/lib/silcclient/client_entry.c b/lib/silcclient/client_entry.c index c59a48fd..a6dc88d5 100644 --- a/lib/silcclient/client_entry.c +++ b/lib/silcclient/client_entry.c @@ -1622,9 +1622,10 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn, SilcChannelEntry channel) { SilcIDCacheEntry id_cache; - SilcBool ret; + SilcBool ret = TRUE; SilcCipher key; SilcHmac hmac; + char *namec; if (!channel) return FALSE; @@ -1636,10 +1637,12 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn, silc_mutex_lock(conn->internal->lock); if (silc_idcache_find_by_context(conn->internal->channel_cache, channel, - &id_cache)) - silc_free(id_cache->name); - ret = silc_idcache_del_by_context(conn->internal->channel_cache, - channel, NULL); + &id_cache)) { + namec = id_cache->name; + ret = silc_idcache_del_by_context(conn->internal->channel_cache, + channel, NULL); + silc_free(namec); + } silc_mutex_unlock(conn->internal->lock); if (!ret) @@ -2029,7 +2032,8 @@ SilcBool silc_client_del_server(SilcClient client, SilcClientConnection conn, SilcServerEntry server) { SilcIDCacheEntry id_cache; - SilcBool ret; + SilcBool ret = TRUE; + char *namec; if (!server) return FALSE; @@ -2041,10 +2045,12 @@ SilcBool silc_client_del_server(SilcClient client, SilcClientConnection conn, silc_mutex_lock(conn->internal->lock); if (silc_idcache_find_by_context(conn->internal->server_cache, server, - &id_cache)) - silc_free(id_cache->name); - ret = silc_idcache_del_by_context(conn->internal->server_cache, - server, NULL); + &id_cache)) { + namec = id_cache->name; + ret = silc_idcache_del_by_context(conn->internal->server_cache, + server, NULL); + silc_free(namec); + } silc_mutex_unlock(conn->internal->lock); silc_free(server->server_name); -- 2.24.0