X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.c;h=74ce18ba2902866107148517f3f961fe645dd714;hp=1e8e79fe129dfc61834394b9b1c93acf7bdbe891;hb=55401f49c984e35e652eb590bdcefa07387ddd44;hpb=d7eea56ab2b7ad768ae93c172dd233767ccdb432 diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 1e8e79fe..74ce18ba 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -228,6 +228,8 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); + silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); } else { silc_idlist_del_data(client); @@ -289,6 +291,8 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server, client->mode = 0; client->router = NULL; client->connection = NULL; + client->data.created = silc_time(); + silc_dlist_del(server->expired_clients, client); silc_dlist_add(server->expired_clients, client); } else { silc_idlist_del_data(client); @@ -1543,8 +1547,17 @@ void silc_server_kill_client(SilcServer server, if (remote_client->connection) { /* Remove locally conneted client */ SilcPacketStream sock = remote_client->connection; - silc_server_free_client_data(server, sock, remote_client, FALSE, NULL); - silc_server_close_connection(server, sock); + + if (sock) + silc_packet_stream_ref(sock); + + silc_server_free_sock_user_data(server, sock, NULL); + + if (sock) { + silc_packet_set_context(sock, NULL); + silc_server_close_connection(server, sock); + silc_packet_stream_unref(sock); + } } else { /* Update statistics */ server->stat.clients--; @@ -1566,6 +1579,7 @@ void silc_server_kill_client(SilcServer server, } /* Remove remote client */ + silc_dlist_del(server->expired_clients, remote_client); silc_idlist_del_data(remote_client); if (!silc_idlist_del_client(server->global_list, remote_client)) { /* Remove this client from watcher list if it is */ @@ -2107,6 +2121,8 @@ SilcBuffer silc_server_get_channel_pk_list(SilcServer server, silc_hash_table_list(channel->channel_pubkeys, &htl); while (silc_hash_table_get(&htl, NULL, (void *)&pk)) { pkp = silc_public_key_payload_encode(pk); + if (!pkp) + continue; list = silc_argument_payload_encode_one(list, pkp->data, silc_buffer_len(pkp), announce ? 0x03 :