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>

@@ -298,23 +298,24 @@
 typedef struct {
         sigqueue_t      sn_sigq;        /* sigq struct for notification */
         u_longlong_t    sn_snid;        /* unique id for notification   */
 } signotifyq_t;
 
-
 typedef struct sigqhdr {                /* sigqueue pool header         */
         sigqueue_t      *sqb_free;      /* free sigq struct list        */
-        uchar_t         sqb_count;      /* sigq free count              */
-        uchar_t         sqb_maxcount;   /* sigq max free count          */
-        ushort_t        sqb_size;       /* size of header+free structs  */
+        int             sqb_count;      /* sigq free count              */
+        uint_t          sqb_maxcount;   /* sigq max free count          */
+        size_t          sqb_size;       /* size of header+free structs  */
         uchar_t         sqb_pexited;    /* process has exited           */
-        uchar_t         sqb_sent;       /* number of sigq sent          */
+        uint_t          sqb_sent;       /* number of sigq sent          */
         kcondvar_t      sqb_cv;         /* waiting for a sigq struct    */
         kmutex_t        sqb_lock;       /* lock for sigq pool           */
 } sigqhdr_t;
 
-#define _SIGQUEUE_MAX   32
+#define _SIGQUEUE_SIZE_BASIC            128     /* basic limit */
+#define _SIGQUEUE_SIZE_PRIVILEGED       512     /* privileged limit */
+
 #define _SIGNOTIFY_MAX  32
 
 extern  void    setsigact(int, void (*)(int), const k_sigset_t *, int);
 extern  void    sigorset(k_sigset_t *, const k_sigset_t *);
 extern  void    sigandset(k_sigset_t *, const k_sigset_t *);