Fixed channel private key freeing.
authorPekka Riikonen <priikone@silcnet.org>
Sat, 3 Nov 2007 21:25:26 +0000 (21:25 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sat, 3 Nov 2007 21:25:26 +0000 (21:25 +0000)
CHANGES
lib/silcclient/client_entry.c
lib/silcclient/client_keyagr.c

diff --git a/CHANGES b/CHANGES
index dd595ce1f1c579c3a4383b410f62b81da4c39f2b..fb572dc979b9958b35860c1e687df3fd1c681781 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+Sun Sep 30 15:16:18 EEST 2007  Pekka Riikonen <priikone@silcnet.org>
+
+       * Fixed channel private key deleting when deleting the channel.
+         Affected file is lib/silcclient/client_channel.c.
+
 Sun Sep  9 17:52:49 EEST 2007  Pekka Riikonen <priikone@silcnet.org>
 
        * SILC Toolkit 1.1.3.
index 488acfd3b804e5cb016073fe35b47e37b6fadfd8..0933c3d4d8bad4b48ac0025b2564de8034b4ada2 100644 (file)
@@ -1722,6 +1722,7 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn,
     return FALSE;
 
   silc_client_empty_channel(client, conn, channel);
+  silc_client_del_channel_private_keys(client, conn, channel);
   silc_hash_table_free(channel->user_list);
   silc_free(channel->channel_name);
   silc_free(channel->topic);
@@ -1748,7 +1749,6 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn,
   if (channel->channel_pubkeys)
     silc_argument_list_free(channel->channel_pubkeys,
                            SILC_ARGUMENT_PUBLIC_KEY);
-  silc_client_del_channel_private_keys(client, conn, channel);
   silc_atomic_uninit16(&channel->internal.refcnt);
   silc_rwlock_free(channel->internal.lock);
   silc_schedule_task_del_by_context(conn->client->schedule, channel);
index 221bd8a30392bdc8716e4dea0d306f39dbeef02e..6a93b061278022fb497d49a546c4e377de4650e7 100644 (file)
@@ -60,6 +60,9 @@ SILC_TASK_CALLBACK(silc_client_keyagr_timeout)
   SilcClientEntry client_entry = context;
   SilcClientKeyAgreement ke = client_entry->internal.ke;
 
+  if (!ke)
+    return;
+
   SILC_LOG_DEBUG(("Key agreement %p timeout", ke));
 
   ke->completion(ke->client, ke->conn, client_entry,