X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_backup.c;fp=apps%2Fsilcd%2Fserver_backup.c;h=ae8d0a762a049c922d1efff04126d61a95888b38;hb=5c09779adcdcf723755b5692a20eeaa3664a7fea;hp=bfd39977bf33bf4bacc0d5191651b0fe8b91d6e6;hpb=a312fb463ab0d4673f6666a8224765082c941005;p=silc.git diff --git a/apps/silcd/server_backup.c b/apps/silcd/server_backup.c index bfd39977..ae8d0a76 100644 --- a/apps/silcd/server_backup.c +++ b/apps/silcd/server_backup.c @@ -149,7 +149,7 @@ void silc_server_backup_del(SilcServer server, SilcServerEntry server_entry) int i; if (!server->backup) - return ; + return; for (i = 0; i < server->backup->servers_count; i++) { if (server->backup->servers[i].server == server_entry) { @@ -163,6 +163,28 @@ void silc_server_backup_del(SilcServer server, SilcServerEntry server_entry) } } +/* Frees all data allocated for backup routers. Call this after deleting + all backup routers and when new routers are added no more, for example + when shutting down the server. */ + +void silc_server_backup_free(SilcServer server) +{ + int i; + + if (!server->backup) + return; + + /* Delete existing servers if caller didn't do it */ + for (i = 0; i < server->backup->servers_count; i++) { + if (server->backup->servers[i].server) + silc_server_backup_del(server, server->backup->servers[i].server); + } + + silc_free(server->backup->servers); + silc_free(server->backup); + server->backup = NULL; +} + /* Marks the IP address and port from the `server_id' as being replaced by backup router indicated by the `server'. If the router connects at a later time we can check whether it has been replaced by an backup