From 63bb287938298ab6fa5bfe3c5f7888c47240b51f Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sat, 3 Nov 2007 21:24:13 +0000 Subject: [PATCH] Do not free packet engine before uninitializing scheduler. Do not disconnct already disconnected streams. --- apps/silcd/server.c | 39 ++++++++++++++++++++++++++++++--------- apps/silcd/server_query.c | 4 ++-- apps/silcd/silcd.c | 7 ++----- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 46fccfc0..2680fc77 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -130,7 +130,8 @@ static SilcBool silc_server_packet_receive(SilcPacketEngine engine, silc_id_str2id(packet->src_id, packet->src_id_len, packet->src_id_type, &client_id, sizeof(client_id))) { if (!SILC_ID_CLIENT_COMPARE(client->id, &client_id)) { - SILC_LOG_DEBUG(("Packet source is not same as sender")); + SILC_LOG_DEBUG(("Packet source is not same as sender, packet %s", + silc_get_packet_name(packet->type))); return FALSE; } } @@ -666,6 +667,10 @@ void silc_server_free(SilcServer server) } } + silc_schedule_task_del_by_context(server->schedule, server); + silc_schedule_uninit(server->schedule); + server->schedule = NULL; + silc_idcache_free(server->local_list->clients); silc_idcache_free(server->local_list->servers); silc_idcache_free(server->local_list->channels); @@ -683,10 +688,6 @@ void silc_server_free(SilcServer server) silc_skr_free(server->repository); silc_packet_engine_stop(server->packet_engine); - silc_schedule_task_del_by_context(server->schedule, server); - silc_schedule_uninit(server->schedule); - server->schedule = NULL; - silc_free(server->local_list); silc_free(server->global_list); silc_free(server->server_name); @@ -915,15 +916,19 @@ SilcBool silc_server_init(SilcServer server) } } + if (server->server_type != SILC_ROUTER) { + server->stat.servers = 1; + server->stat.cell_servers = 1; + } else { + server->stat.routers = 1; + } + /* If we are normal server we'll retrieve network statisticial information once in a while from the router. */ if (server->server_type != SILC_ROUTER) silc_schedule_task_add_timeout(server->schedule, silc_server_get_stats, server, 10, 0); - if (server->server_type == SILC_ROUTER) - server->stat.routers++; - /* Start packet engine */ server->packet_engine = silc_packet_engine_start(server->rng, server->server_type == SILC_ROUTER, @@ -1202,6 +1207,9 @@ void silc_server_stop(SilcServer server) while ((ps = silc_dlist_get(list))) { SilcIDListData idata = silc_packet_get_context(ps); + if (!silc_packet_stream_is_valid(ps)) + continue; + if (idata) idata->status &= ~SILC_IDLIST_STATUS_DISABLED; @@ -1227,6 +1235,8 @@ void silc_server_stop(SilcServer server) silc_server_connect_router); silc_schedule_task_del_by_callback(server->schedule, silc_server_connect_to_router_retry); + silc_schedule_task_del_by_callback(server->schedule, + silc_server_connect_to_router); silc_schedule_stop(server->schedule); @@ -1373,6 +1383,12 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, return; } + /* Statistics */ + server->stat.my_servers++; + if (server->server_type == SILC_ROUTER) + server->stat.servers++; + SILC_LOG_DEBUG(("my_servers %d", server->stat.my_servers)); + silc_idlist_add_data(id_entry, (SilcIDListData)entry); break; @@ -1443,6 +1459,12 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, SILC_IDLIST_STATUS_LOCAL); idata->sconn = sconn; + /* Statistics */ + server->stat.my_routers++; + if (server->server_type == SILC_ROUTER) + server->stat.routers++; + SILC_LOG_DEBUG(("my_routers %d", server->stat.my_routers)); + if (!sconn->backup) { /* Mark this router our primary router if we're still standalone */ if (server->standalone) { @@ -1528,7 +1550,6 @@ silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success, /* Set the entry as packet stream context */ silc_packet_set_context(sconn->sock, id_entry); - out: /* Call the completion callback to indicate that we've connected to the router */ if (sconn && sconn->callback) diff --git a/apps/silcd/server_query.c b/apps/silcd/server_query.c index cd5103a4..0725286c 100644 --- a/apps/silcd/server_query.c +++ b/apps/silcd/server_query.c @@ -397,11 +397,11 @@ void silc_server_query_send_router_reply(void *context, void *reply) returned error. */ if (query->nick_server[0] && !query->dynamic_retry && !silc_server_num_sockets_by_remote(server, query->nick_server, - query->nick_server, 1334, type)) { + query->nick_server, 706, type)) { SILC_LOG_DEBUG(("Retry query by connecting to %s:%d", query->nick_server, 706)); silc_server_create_connection(server, FALSE, TRUE, query->nick_server, - 1334, silc_server_query_connected, + 706, silc_server_query_connected, query); query->dynamic_retry = TRUE; query->resolved = FALSE; diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c index 14e3657f..19ba9193 100644 --- a/apps/silcd/silcd.c +++ b/apps/silcd/silcd.c @@ -245,9 +245,7 @@ SILC_TASK_CALLBACK(got_hup) SILC_TASK_CALLBACK(stop_server) { - /* Stop scheduler, the program will stop eventually after noticing - that the scheduler is down. */ - silc_schedule_stop(silcd->schedule); + silc_server_stop(silcd); } /* Dump server statistics into a file into /tmp directory */ @@ -754,8 +752,7 @@ int main(int argc, char **argv) and we will exit. */ silc_server_run(silcd); - /* Stop the server and free it. */ - silc_server_stop(silcd); + /* Free server */ silc_server_config_destroy(silcd->config); silc_server_free(silcd); -- 2.24.0