Mercurial > dovecot > core-2.2
changeset 12818:65e943eafe8b
master: Memory leak fix if services couldn't be initialized.
(On config reload.)
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 04 Mar 2011 20:01:03 +0200 |
parents | e758f10f40c1 |
children | 539da23bff31 |
files | src/master/service.c |
diffstat | 1 files changed, 16 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/service.c Fri Mar 04 19:51:44 2011 +0200 +++ b/src/master/service.c Fri Mar 04 20:01:03 2011 +0200 @@ -426,18 +426,16 @@ return FALSE; } -int services_create(const struct master_settings *set, - struct service_list **services_r, const char **error_r) +static int +services_create_real(const struct master_settings *set, pool_t pool, + struct service_list **services_r, const char **error_r) { struct service_list *service_list; struct service *service; struct service_settings *const *service_settings; - pool_t pool; const char *error; unsigned int i, count; - pool = pool_alloconly_create("services pool", 4096); - service_list = p_new(pool, struct service_list, 1); service_list->refcount = 1; service_list->pool = pool; @@ -504,6 +502,19 @@ return 0; } +int services_create(const struct master_settings *set, + struct service_list **services_r, const char **error_r) +{ + pool_t pool; + + pool = pool_alloconly_create("services pool", 4096); + if (services_create_real(set, pool, services_r, error_r) < 0) { + pool_unref(&pool); + return -1; + } + return 0; +} + void service_signal(struct service *service, int signo) { struct service_process *process = service->processes;