Merged from silc_1_0_branch.
[silc.git] / lib / silcclient / client.c
index 631862a88d46e6012171c75d9f5da6f559ee4072..745cb698b52daf343e7233769ab7df0f770f7c00 100644 (file)
@@ -88,6 +88,16 @@ void silc_client_free(SilcClient client)
     if (client->rng)
       silc_rng_free(client->rng);
 
+    silc_cipher_unregister_all();
+    silc_pkcs_unregister_all();
+    silc_hash_unregister_all();
+    silc_hmac_unregister_all();
+
+    silc_hash_free(client->md5hash);
+    silc_hash_free(client->sha1hash);
+    silc_hmac_free(client->internal->md5hmac);
+    silc_hmac_free(client->internal->sha1hmac);
+    silc_cipher_free(client->internal->none_cipher);
     silc_free(client->internal->params);
     silc_free(client->internal->silc_client_version);
     silc_free(client->internal);
@@ -1635,10 +1645,10 @@ SILC_TASK_CALLBACK(silc_client_send_auto_nick)
 {
   SilcClientConnection conn = (SilcClientConnection)context;
   SilcClient client = conn->client;
-
-  silc_client_command_send(client, conn, SILC_COMMAND_NICK, 
-                          ++conn->cmd_ident, 1, 1, 
-                          client->nickname, strlen(client->nickname));
+  if (client)
+    silc_client_command_send(client, conn, SILC_COMMAND_NICK, 
+                            ++conn->cmd_ident, 1, 1, 
+                            client->nickname, strlen(client->nickname));
 }
 
 /* Client session resuming callback.  If the session was resumed