From: Timo Sirainen Date: Fri, 9 Oct 2009 00:49:31 +0000 (-0400) Subject: master: Added default_vsz_limit setting, which defaults to 256 MB. X-Git-Tag: 2.0.alpha1~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=614529ee060755c0b282102b70daf56bcd64222d;p=thirdparty%2Fdovecot%2Fcore.git master: Added default_vsz_limit setting, which defaults to 256 MB. --HG-- branch : HEAD --- diff --git a/doc/example-config/conf.d/master.conf b/doc/example-config/conf.d/master.conf index ae822f125b..2f2d19ce54 100644 --- a/doc/example-config/conf.d/master.conf +++ b/doc/example-config/conf.d/master.conf @@ -1,5 +1,6 @@ default_process_limit = 100 default_client_limit = 1000 +default_vsz_limit = 256 service config { type = config diff --git a/src/master/master-settings.c b/src/master/master-settings.c index 2a306e3840..611b7d2b95 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -169,6 +169,7 @@ static struct setting_define master_setting_defines[] = { DEF(SET_ENUM, ssl), DEF(SET_UINT, default_process_limit), DEF(SET_UINT, default_client_limit), + DEF(SET_UINT, default_vsz_limit), DEF(SET_BOOL, version_ignore), DEF(SET_BOOL, mail_debug), @@ -192,6 +193,7 @@ static struct master_settings master_default_settings = { MEMBER(ssl) "yes:no:required", MEMBER(default_process_limit) 100, MEMBER(default_client_limit) 1000, + MEMBER(default_vsz_limit) 256, MEMBER(version_ignore) FALSE, MEMBER(mail_debug) FALSE, diff --git a/src/master/master-settings.h b/src/master/master-settings.h index df8175a246..45a923049e 100644 --- a/src/master/master-settings.h +++ b/src/master/master-settings.h @@ -49,6 +49,7 @@ struct master_settings { const char *ssl; unsigned int default_process_limit; unsigned int default_client_limit; + unsigned int default_vsz_limit; bool version_ignore; bool mail_debug; diff --git a/src/master/service-process.c b/src/master/service-process.c index cd3f5d8bed..c0f21eaf2d 100644 --- a/src/master/service-process.c +++ b/src/master/service-process.c @@ -345,8 +345,8 @@ drop_privileges(struct service *service, const char *const *auth_args, if (auth_args != NULL && service->set->master_set->mail_debug) env_put("DEBUG=1"); - if (service->set->vsz_limit != 0) - restrict_process_size(service->set->vsz_limit, -1U); + if (service->vsz_limit != 0) + restrict_process_size(service->vsz_limit, -1U); restrict_access_init(&rset); rset.uid = service->uid; @@ -658,11 +658,11 @@ get_exit_status_message(struct service *service, enum fatal_exit_status status) case FATAL_LOGERROR: return "Internal logging error"; case FATAL_OUTOFMEM: - if (service->set->vsz_limit == 0) + if (service->vsz_limit == 0) return "Out of memory"; return t_strdup_printf("Out of memory (vsz_limit=%u MB, " "you may need to increase it)", - service->set->vsz_limit); + service->vsz_limit); case FATAL_EXEC: return "exec() failed"; diff --git a/src/master/service.c b/src/master/service.c index 99052855a1..d2d8cbe434 100644 --- a/src/master/service.c +++ b/src/master/service.c @@ -167,6 +167,9 @@ service_create(pool_t pool, const struct service_settings *set, service->client_limit < set->service_count) service->client_limit = set->service_count; + service->vsz_limit = set->vsz_limit != 0 ? set->vsz_limit : + set->master_set->default_vsz_limit; + service->type = SERVICE_TYPE_UNKNOWN; if (*set->type != '\0') { if (strcmp(set->type, "log") == 0) diff --git a/src/master/service.h b/src/master/service.h index 76751fb0f5..da54253458 100644 --- a/src/master/service.h +++ b/src/master/service.h @@ -70,6 +70,8 @@ struct service { /* Maximum number of client connections a process can handle. */ unsigned int client_limit; + /* set->vsz_limit or set->master_set->default_client_limit */ + unsigned int vsz_limit; /* log process pipe file descriptors. */ int log_fd[2];