X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fserverconfig.c;h=0b31048af5093fcc86a32b7cb33f9196555426de;hb=c2617920b4fe8b5745d2399129105fdc59dc615c;hp=0d217e7c3e39f7c22d9feaf46d94a4b56d887492;hpb=0e989f70da6561b7218ab3bf508a90dc84febcd1;p=silc.git diff --git a/apps/silcd/serverconfig.c b/apps/silcd/serverconfig.c index 0d217e7c..0b31048a 100644 --- a/apps/silcd/serverconfig.c +++ b/apps/silcd/serverconfig.c @@ -1269,6 +1269,7 @@ SilcServerConfig silc_server_config_alloc(const char *filename) /* Set default to configuration parameters */ silc_server_config_set_defaults(config_new); + config_new->refcount = 1; return config_new; } @@ -1291,16 +1292,8 @@ void silc_server_config_ref(SilcServerConfigRef *ref, SilcServerConfig config, void silc_server_config_unref(SilcServerConfigRef *ref) { - SilcServerConfig config = ref->config; - - if (ref->ref_ptr) { - config->refcount--; - SILC_LOG_DEBUG(("Unreferencing config [%p] refcnt %hu->%hu", config, - config->refcount + 1, config->refcount)); - if (!config->refcount) - silc_server_config_destroy(config); - ref->ref_ptr = NULL; - } + if (ref->ref_ptr) + silc_server_config_destroy(ref->config); } /* Destroy a config object with all his children lists */ @@ -1309,6 +1302,12 @@ void silc_server_config_destroy(SilcServerConfig config) { void *tmp; + config->refcount--; + SILC_LOG_DEBUG(("Unreferencing config [%p] refcnt %hu->%hu", config, + config->refcount + 1, config->refcount)); + if (config->refcount > 0) + return; + SILC_LOG_DEBUG(("Freeing config context")); silc_free(config->module_path);