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>

@@ -45,10 +45,12 @@
 #include <sys/mman.h>
 #include <sys/timer.h>
 #include <sys/zone.h>
 #include <sys/vm_usage.h>
 
+extern rctl_hndl_t rc_process_sigqueue;
+
 long
 sysconfig(int which)
 {
         switch (which) {
 

@@ -138,11 +140,21 @@
 
         case _CONFIG_SEM_VALUE_MAX:
                 return (_SEM_VALUE_MAX);
 
         case _CONFIG_SIGQUEUE_MAX:
-                return (_SIGQUEUE_MAX);
+                /*
+                 * Maximum number of outstanding queued signals.
+                 */
+                {
+                        rlim64_t sigqsz_max;
+                        mutex_enter(&curproc->p_lock);
+                        sigqsz_max = rctl_enforced_value(rc_process_sigqueue,
+                            curproc->p_rctls, curproc);
+                        mutex_exit(&curproc->p_lock);
+                        return ((uint_t)sigqsz_max);
+                }
 
         case _CONFIG_SIGRT_MIN:
                 return (_SIGRTMIN);
 
         case _CONFIG_SIGRT_MAX: