diff --git a/src/connection.c b/src/connection.c index 0e02babc..28999670 100644 --- a/src/connection.c +++ b/src/connection.c @@ -442,7 +442,6 @@ int connection_create_source(client_t *client, connection_t *con, http_parser_t config = config_get_config(); mountproxy = config->mounts; thread_mutex_lock(&(config_locks()->mounts_lock)); - config_release_config(); while(mountproxy) { if(!strcmp(mountproxy->mountname, mount)) { @@ -459,6 +458,7 @@ int connection_create_source(client_t *client, connection_t *con, http_parser_t if (format == FORMAT_ERROR) { WARN1("Content-type \"%s\" not supported, dropping source", contenttype); thread_mutex_unlock(&(config_locks()->mounts_lock)); + config_release_config(); goto fail; } else { source = source_create(client, con, parser, mount, @@ -471,6 +471,7 @@ int connection_create_source(client_t *client, connection_t *con, http_parser_t source = source_create(client, con, parser, mount, format, mountinfo); thread_mutex_unlock(&(config_locks()->mounts_lock)); } + config_release_config(); source->send_return = 1; source->shutdown_rwlock = &_source_shutdown_rwlock; diff --git a/src/source.c b/src/source.c index 06d84f74..0e2b92d1 100644 --- a/src/source.c +++ b/src/source.c @@ -72,9 +72,9 @@ source_t *source_create(client_t *client, connection_t *con, src->yp_public = 0; if(mountinfo != NULL) { - src->fallback_mount = mountinfo->fallback_mount; + src->fallback_mount = strdup (mountinfo->fallback_mount); src->max_listeners = mountinfo->max_listeners; - src->dumpfilename = mountinfo->dumpfile; + src->dumpfilename = strdup (mountinfo->dumpfile); } if(src->dumpfilename != NULL) { @@ -140,6 +140,7 @@ int source_free_source(void *key) free(source->mount); free(source->fallback_mount); + free(source->dumpfilename); client_destroy(source->client); avl_tree_free(source->pending_tree, _free_client); avl_tree_free(source->client_tree, _free_client);