+/* ID Cache destructor */
+
+void silc_idlist_client_destructor(SilcIDCache cache,
+ SilcIDCacheEntry entry,
+ void *dest_context,
+ void *app_context)
+{
+ SilcServer server = dest_context;
+ SilcClientEntry client;
+
+ client = (SilcClientEntry)entry->context;
+ if (client) {
+ /* Remove client's public key from repository, this will free it too. */
+ if (client->data.public_key)
+ silc_skr_del_public_key(server->repository, client->data.public_key,
+ client);
+
+ assert(!silc_hash_table_count(client->channels));
+ silc_free(client->nickname);
+ silc_free(client->servername);
+ silc_free(client->username);
+ silc_free(client->userinfo);
+ silc_free(client->id);
+ silc_free(client->attrs);
+ silc_hash_table_free(client->channels);
+
+ memset(client, 'A', sizeof(*client));
+ silc_free(client);
+ }
+}
+