channel = chl->channel;
/* Remove channel from client's channel list */
- silc_hash_table_del_by_context(client->channels, channel, chl);
+ silc_hash_table_del(client->channels, channel);
/* Remove channel if there is no users anymore */
if (server->server_type == SILC_ROUTER &&
silc_hash_table_count(channel->user_list) < 2) {
- server->stat.my_channels--;
if (channel->rekey)
silc_task_unregister_by_context(server->timeout_queue, channel->rekey);
silc_hash_table_list(channel->user_list, &htl2);
while (silc_hash_table_get(&htl2, NULL, (void *)&chl2)) {
- silc_hash_table_del_by_context(chl2->client->channels, channel, chl);
- silc_hash_table_del_by_context(channel->user_list,
- chl2->client, chl);
+ silc_hash_table_del(chl2->client->channels, channel);
+ silc_hash_table_del(channel->user_list, chl2->client);
silc_free(chl2);
}
continue;
}
+ /* Remove the channel entry */
if (!silc_idlist_del_channel(server->local_list, channel))
silc_idlist_del_channel(server->global_list, channel);
+ server->stat.my_channels--;
continue;
}
/* Remove client from channel's client list */
- silc_hash_table_del_by_context(channel->user_list, chl->client, chl);
+ silc_hash_table_del(channel->user_list, chl->client);
silc_free(chl);
server->stat.my_chanclients--;
silc_hash_table_list(channel->user_list, &htl2);
while (silc_hash_table_get(&htl2, NULL, (void *)&chl2)) {
- silc_hash_table_del_by_context(chl2->client->channels, channel, chl);
- silc_hash_table_del_by_context(channel->user_list,
- chl2->client, chl);
+ silc_hash_table_del(chl2->client->channels, channel);
+ silc_hash_table_del(channel->user_list, chl2->client);
silc_free(chl2);
}
continue;
}
+ /* Remove the channel entry */
if (!silc_idlist_del_channel(server->local_list, channel))
silc_idlist_del_channel(server->global_list, channel);
server->stat.my_channels--;
SilcClientEntry client,
int notify)
{
- SilcChannelEntry ch;
SilcChannelClientEntry chl;
SilcBuffer clidp;
the channel's user list. */
clidp = silc_id_payload_encode(client->id, SILC_ID_CLIENT);
- ch = chl->channel;
/* Remove channel from client's channel list */
- silc_hash_table_del_by_context(client->channels, chl->channel, chl);
+ silc_hash_table_del(client->channels, chl->channel);
/* Remove channel if there is no users anymore */
if (server->server_type == SILC_ROUTER &&
}
/* Remove client from channel's client list */
- silc_hash_table_del_by_context(channel->user_list, chl->client, chl);
+ silc_hash_table_del(channel->user_list, chl->client);
silc_free(chl);
server->stat.my_chanclients--;
silc_hash_table_list(channel->user_list, &htl2);
while (silc_hash_table_get(&htl2, NULL, (void *)&chl2)) {
- silc_hash_table_del_by_context(chl2->client->channels, channel, chl);
- silc_hash_table_del_by_context(channel->user_list,
- chl2->client, chl);
+ silc_hash_table_del(chl2->client->channels, channel);
+ silc_hash_table_del(channel->user_list, chl2->client);
silc_free(chl2);
}
return FALSE;
}
+ /* Remove the channel entry */
if (!silc_idlist_del_channel(server->local_list, channel))
silc_idlist_del_channel(server->global_list, channel);
server->stat.my_channels--;
SilcHashTableEntry *table, e, tmp;
uint32 table_size, size_index;
+ if (new_size)
+ silc_hash_table_primesize(new_size, &size_index);
+ else
+ silc_hash_table_primesize(ht->entry_count, &size_index);
+
+ if (size_index == ht->table_size)
+ return;
+
+ SILC_HT_DEBUG(("Rehashing"));
+
/* Take old hash table */
table = ht->table;
table_size = ht->table_size;
/* Allocate new table */
- ht->table = silc_calloc(new_size ? silc_hash_table_primesize(new_size,
- &size_index) :
- silc_hash_table_primesize(ht->entry_count,
- &size_index),
- sizeof(*ht->table));
+ ht->table = silc_calloc(primesize[size_index], sizeof(*ht->table));
ht->table_size = size_index;
+ ht->entry_count = 0;
/* Rehash */
for (i = 0; i < primesize[table_size]; i++) {
SilcHashTableEntry *table, e, tmp;
uint32 table_size, size_index;
+ if (new_size)
+ silc_hash_table_primesize(new_size, &size_index);
+ else
+ silc_hash_table_primesize(ht->entry_count, &size_index);
+
+ if (size_index == ht->table_size)
+ return;
+
SILC_HT_DEBUG(("Rehashing"));
/* Take old hash table */
table_size = ht->table_size;
/* Allocate new table */
- ht->table = silc_calloc(new_size ? silc_hash_table_primesize(new_size,
- &size_index) :
- silc_hash_table_primesize(ht->entry_count,
- &size_index),
- sizeof(*ht->table));
+ ht->table = silc_calloc(primesize[size_index], sizeof(*ht->table));
ht->table_size = size_index;
ht->entry_count = 0;