]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Added default_vsz_limit setting, which defaults to 256 MB.
authorTimo Sirainen <tss@iki.fi>
Fri, 9 Oct 2009 00:49:31 +0000 (20:49 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 9 Oct 2009 00:49:31 +0000 (20:49 -0400)
--HG--
branch : HEAD

doc/example-config/conf.d/master.conf
src/master/master-settings.c
src/master/master-settings.h
src/master/service-process.c
src/master/service.c
src/master/service.h

index ae822f125bce9a5c7d87a536b3258e623c50d1c4..2f2d19ce548fe6e51040d32c38f8e9319958da7e 100644 (file)
@@ -1,5 +1,6 @@
 default_process_limit = 100
 default_client_limit = 1000
+default_vsz_limit = 256
 
 service config {
   type = config
index 2a306e38404bb4db238344d9543ca4ee35522464..611b7d2b958c80e347ef1a6d48e6f7f5abedb9a0 100644 (file)
@@ -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,
index df8175a246cf0132b7fc9c95abe5fdfa0a5ddf7e..45a923049e2ebec7d5ef47857495acd97b13c7a3 100644 (file)
@@ -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;
index cd3f5d8bed408caa4f24524a909a505e09cc715c..c0f21eaf2d3a7cff1a4833c664f32d2cf7624bb4 100644 (file)
@@ -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";
 
index 99052855a11709dfe7d8c725aa1bfc7997613482..d2d8cbe4340f12e82dc5f3c3691adf51557be7f5 100644 (file)
@@ -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)
index 76751fb0f54eb68b3780f3ddc47ecac8a1ba1e66..da5425345892335b6489f130bbb347b6c7e3a239 100644 (file)
@@ -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];