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 {
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 {
if (remote_client->connection) {
/* Remove locally conneted client */
SilcPacketStream sock = remote_client->connection;
+
+ if (sock)
+ silc_packet_stream_ref(sock);
+
silc_server_free_sock_user_data(server, sock, NULL);
- silc_server_close_connection(server, sock);
+
+ 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--;
}
/* 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 */