Print this page
3830 SIGQUEUE_MAX's limit of 32 is too low
Reviewed by: Cedric Blancher <cedric.blancher@gmail.com>
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Reviewed by: Irek Szczesniak <iszczesniak@gmail.com>

*** 21,39 **** /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ - #pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <sys/cmn_err.h> #include <sys/sysmacros.h> #include <sys/proc.h> #include <sys/rctl.h> #include <sys/rctl_impl.h> #include <sys/port_kernel.h> #include <sys/vmparam.h> #include <sys/machparam.h> /* --- 21,39 ---- /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #include <sys/types.h> #include <sys/cmn_err.h> #include <sys/sysmacros.h> #include <sys/proc.h> #include <sys/rctl.h> #include <sys/rctl_impl.h> #include <sys/port_kernel.h> + #include <sys/signal.h> + #include <sys/var.h> #include <sys/vmparam.h> #include <sys/machparam.h> /*
*** 63,72 **** --- 63,73 ---- rctl_hndl_t rc_process_msgmnb; rctl_hndl_t rc_process_msgtql; rctl_hndl_t rc_process_semmsl; rctl_hndl_t rc_process_semopm; rctl_hndl_t rc_process_portev; + rctl_hndl_t rc_process_sigqueue; /* * process.max-cpu-time / RLIMIT_CPU */ /*ARGSUSED*/
*** 286,296 **** * Register the various resource controls associated with process entities. * The historical rlim_infinity_map and rlim_infinity32_map are now encoded * here as the native and ILP32 infinite values for each resource control. */ void ! rctlproc_init() { rctl_set_t *set; rctl_alloc_gp_t *gp; rctl_entity_p_t e; --- 287,297 ---- * Register the various resource controls associated with process entities. * The historical rlim_infinity_map and rlim_infinity32_map are now encoded * here as the native and ILP32 infinite values for each resource control. */ void ! rctlproc_init(void) { rctl_set_t *set; rctl_alloc_gp_t *gp; rctl_entity_p_t e;
*** 367,376 **** --- 368,391 ---- PORT_MAX_EVENTS, PORT_MAX_EVENTS, &rctl_absolute_ops); rctl_add_default_limit("process.max-port-events", PORT_DEFAULT_EVENTS, RCPRIV_PRIVILEGED, RCTL_LOCAL_DENY); /* + * We set the upper limit to the maximum number of processes per user + * to make it theoretical possible to deliver all SIGCHILD signals on + * child termination, but at least to 8k. + */ + rc_process_sigqueue = rctl_register("process.max-sigqueue-size", + RCENTITY_PROCESS, RCTL_GLOBAL_LOWERABLE | RCTL_GLOBAL_DENY_ALWAYS | + RCTL_GLOBAL_COUNT, MAX(v.v_maxup, 8192), MAX(v.v_maxup, 8192), + &rctl_absolute_ops); + rctl_add_default_limit("process.max-sigqueue-size", + _SIGQUEUE_SIZE_BASIC, RCPRIV_BASIC, RCTL_LOCAL_DENY); + rctl_add_default_limit("process.max-sigqueue-size", + _SIGQUEUE_SIZE_PRIVILEGED, RCPRIV_PRIVILEGED, RCTL_LOCAL_DENY); + + /* * Place minimal set of controls on "sched" process for inheritance by * processes created via newproc(). */ set = rctl_set_create(); gp = rctl_set_init_prealloc(RCENTITY_PROCESS);