NetWare has a directive called ThreadStackSize which has been in use
for a number of years.  The main reason for this directive on NetWare
was due to the fixed stack in the OS.  Would it make more sense to call
the new directive ThreadStackSize rather than WorkerStackSize to avoid
two different directive names with similar functionality?

Brad

Brad Nicholes
Senior Software Engineer
Novell, Inc., the leading provider of Net business solutions
http://www.novell.com 

>>> [EMAIL PROTECTED] Wednesday, March 10, 2004 8:57:50 PM >>>
trawick     2004/03/10 19:57:50

  Modified:    .        CHANGES
               include  mpm_common.h
               server   core.c mpm_common.c
               server/mpm/experimental/leader leader.c mpm.h
               server/mpm/experimental/perchild mpm.h perchild.c
               server/mpm/experimental/threadpool mpm.h threadpool.c
               server/mpm/winnt child.c mpm.h
               server/mpm/worker mpm.h worker.c
  Log:
  Threaded MPMs for Unix and Win32: Add WorkerStackSize directive
  to override default thread stack size for threads which handle
  client connections.  Required for some third-party modules on
  platforms with small default thread stack size.
  
  This is also useful for trimming back the stack size on
  platforms with relatively large default stack size in order to
  conserve address space for supporting more threads per child.
  
  Revision  Changes    Path
  1.1421    +6 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.1420
  retrieving revision 1.1421
  diff -u -r1.1420 -r1.1421
  --- CHANGES   10 Mar 2004 15:05:51 -0000      1.1420
  +++ CHANGES   11 Mar 2004 03:57:49 -0000      1.1421
  @@ -1,6 +1,12 @@
   Changes with Apache 2.1.0-dev
   
     [Remove entries to the current 2.0 section below, when
backported]
  +
  +  *) Threaded MPMs for Unix and Win32: Add WorkerStackSize
directive
  +     to override default thread stack size for threads which handle
  +     client connections.  Required for some third-party modules on
  +     platforms with small default thread stack size.  [Jeff
Trawick]
  +
     *) Win32: Tweak worker thread accounting routines to eliminate
        server hang when number of Listen directives in httpd.conf
        is greater than or equal to the setting of ThreadsPerChild.
  
  
  
  1.48      +6 -0      httpd-2.0/include/mpm_common.h
  
  Index: mpm_common.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/include/mpm_common.h,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- mpm_common.h      6 Mar 2004 14:50:55 -0000       1.47
  +++ mpm_common.h      11 Mar 2004 03:57:49 -0000      1.48
  @@ -248,6 +248,12 @@
                                              const char *arg);
   #endif
   
  +#ifdef AP_MPM_WANT_SET_STACKSIZE
  +extern apr_size_t ap_worker_stacksize;
  +extern const char *ap_mpm_set_worker_stacksize(cmd_parms *cmd, void
*dummy,
  +                                               const char *arg);
  +#endif
  +
   #ifdef AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   extern apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t
*pconf);
   extern apr_status_t ap_fatal_signal_child_setup(server_rec *s);
  
  
  
  1.265     +4 -0      httpd-2.0/server/core.c
  
  Index: core.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/core.c,v
  retrieving revision 1.264
  retrieving revision 1.265
  diff -u -r1.264 -r1.265
  --- core.c    1 Mar 2004 21:40:44 -0000       1.264
  +++ core.c    11 Mar 2004 03:57:49 -0000      1.265
  @@ -3225,6 +3225,10 @@
   AP_INIT_TAKE1("MaxMemFree", ap_mpm_set_max_mem_free, NULL,
RSRC_CONF,
                 "Maximum number of 1k blocks a particular childs
allocator may hold."),
   #endif
  +#ifdef AP_MPM_WANT_SET_STACKSIZE
  +AP_INIT_TAKE1("WorkerStackSize", ap_mpm_set_worker_stacksize, NULL,
RSRC_CONF,
  +              "Size in bytes of stack used by threads handling
client connections"),
  +#endif
   #if AP_ENABLE_EXCEPTION_HOOK
   AP_INIT_TAKE1("EnableExceptionHook", ap_mpm_set_exception_hook,
NULL, RSRC_CONF,
                 "Controls whether exception hook may be called after a
crash"),
  
  
  
  1.119     +24 -0     httpd-2.0/server/mpm_common.c
  
  Index: mpm_common.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm_common.c,v
  retrieving revision 1.118
  retrieving revision 1.119
  diff -u -r1.118 -r1.119
  --- mpm_common.c      6 Mar 2004 14:50:55 -0000       1.118
  +++ mpm_common.c      11 Mar 2004 03:57:49 -0000      1.119
  @@ -870,6 +870,30 @@
   
   #endif /* AP_MPM_WANT_SET_MAX_MEM_FREE */
   
  +#ifdef AP_MPM_WANT_SET_STACKSIZE
  +apr_size_t ap_worker_stacksize = 0; /* use system default */
  +
  +const char *ap_mpm_set_worker_stacksize(cmd_parms *cmd, void
*dummy,
  +                                        const char *arg)
  +{
  +    long value;
  +    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
  +    if (err != NULL) {
  +        return err;
  +    }
  +    
  +    value = strtol(arg, NULL, 0);
  +    if (value < 0 || errno == ERANGE)
  +        return apr_pstrcat(cmd->pool, "Invalid WorkerStackSize
value: ", 
  +                           arg, NULL);
  +
  +    ap_worker_stacksize = (apr_size_t)value;
  +
  +    return NULL;
  +}
  +
  +#endif /* AP_MPM_WANT_SET_STACKSIZE */
  +
   #ifdef AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   
   static pid_t parent_pid, my_pid;
  
  
  
  1.41      +3 -0     
httpd-2.0/server/mpm/experimental/leader/leader.c
  
  Index: leader.c
  ===================================================================
  RCS file:
/home/cvs/httpd-2.0/server/mpm/experimental/leader/leader.c,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- leader.c  9 Feb 2004 20:40:50 -0000       1.40
  +++ leader.c  11 Mar 2004 03:57:49 -0000      1.41
  @@ -1074,6 +1074,9 @@
       apr_threadattr_create(&thread_attr, pchild);
       /* 0 means PTHREAD_CREATE_JOINABLE */
       apr_threadattr_detach_set(thread_attr, 0);
  +    if (ap_worker_stacksize != 0) {
  +        apr_threadattr_stacksize_set(thread_attr,
ap_worker_stacksize);
  +    }
   
       ts->threads = threads;
       ts->child_num_arg = child_num_arg;
  
  
  
  1.13      +1 -0      httpd-2.0/server/mpm/experimental/leader/mpm.h
  
  Index: mpm.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/experimental/leader/mpm.h,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- mpm.h     9 Feb 2004 20:40:50 -0000       1.12
  +++ mpm.h     11 Mar 2004 03:57:49 -0000      1.13
  @@ -34,6 +34,7 @@
   #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
   #define AP_MPM_WANT_SIGNAL_SERVER
   #define AP_MPM_WANT_SET_MAX_MEM_FREE
  +#define AP_MPM_WANT_SET_STACKSIZE
   #define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   #define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
   
  
  
  
  1.23      +1 -0     
httpd-2.0/server/mpm/experimental/perchild/mpm.h
  
  Index: mpm.h
  ===================================================================
  RCS file:
/home/cvs/httpd-2.0/server/mpm/experimental/perchild/mpm.h,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- mpm.h     9 Feb 2004 20:40:50 -0000       1.22
  +++ mpm.h     11 Mar 2004 03:57:50 -0000      1.23
  @@ -34,6 +34,7 @@
   #define AP_MPM_WANT_SET_COREDUMPDIR
   #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
   #define AP_MPM_WANT_SIGNAL_SERVER
  +#define AP_MPM_WANT_SET_STACKSIZE
   #define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   #define AP_MPM_USES_POD
   
  
  
  
  1.146     +3 -1     
httpd-2.0/server/mpm/experimental/perchild/perchild.c
  
  Index: perchild.c
  ===================================================================
  RCS file:
/home/cvs/httpd-2.0/server/mpm/experimental/perchild/perchild.c,v
  retrieving revision 1.145
  retrieving revision 1.146
  diff -u -r1.145 -r1.146
  --- perchild.c        9 Feb 2004 20:40:50 -0000       1.145
  +++ perchild.c        11 Mar 2004 03:57:50 -0000      1.146
  @@ -982,7 +982,9 @@
                       APR_THREAD_MUTEX_DEFAULT, pchild);
   
       apr_threadattr_create(&worker_thread_attr, pchild);
  -    apr_threadattr_detach_set(worker_thread_attr, 1);               
                     
  +    apr_threadattr_detach_set(worker_thread_attr, 1);               
               if (ap_worker_stacksize != 0) {
  +        apr_threadattr_stacksize_set(thread_attr,
ap_worker_stacksize);
  +    }
   
       /* We are creating worker threads right now */
       for (i=0; i < threads_to_start; i++) {
  
  
  
  1.10      +1 -0     
httpd-2.0/server/mpm/experimental/threadpool/mpm.h
  
  Index: mpm.h
  ===================================================================
  RCS file:
/home/cvs/httpd-2.0/server/mpm/experimental/threadpool/mpm.h,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- mpm.h     9 Feb 2004 20:40:51 -0000       1.9
  +++ mpm.h     11 Mar 2004 03:57:50 -0000      1.10
  @@ -34,6 +34,7 @@
   #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
   #define AP_MPM_WANT_SIGNAL_SERVER
   #define AP_MPM_WANT_SET_MAX_MEM_FREE
  +#define AP_MPM_WANT_SET_STACKSIZE
   #define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   #define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
   
  
  
  
  1.29      +3 -0     
httpd-2.0/server/mpm/experimental/threadpool/threadpool.c
  
  Index: threadpool.c
  ===================================================================
  RCS file:
/home/cvs/httpd-2.0/server/mpm/experimental/threadpool/threadpool.c,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- threadpool.c      9 Feb 2004 20:40:51 -0000       1.28
  +++ threadpool.c      11 Mar 2004 03:57:50 -0000      1.29
  @@ -1289,6 +1289,9 @@
       apr_threadattr_create(&thread_attr, pchild);
       /* 0 means PTHREAD_CREATE_JOINABLE */
       apr_threadattr_detach_set(thread_attr, 0);
  +    if (ap_worker_stacksize != 0) {
  +        apr_threadattr_stacksize_set(thread_attr,
ap_worker_stacksize);
  +    }
   
       ts->threads = threads;
       ts->listener = NULL;
  
  
  
  1.34      +2 -1      httpd-2.0/server/mpm/winnt/child.c
  
  Index: child.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/child.c,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- child.c   10 Mar 2004 15:05:52 -0000      1.33
  +++ child.c   11 Mar 2004 03:57:50 -0000      1.34
  @@ -928,7 +928,8 @@
                   continue;
               }
               ap_update_child_status_from_indexes(0, i,
SERVER_STARTING, NULL);
  -            child_handles[i] = (HANDLE) _beginthreadex(NULL, 0,
(LPTHREAD_START_ROUTINE) worker_main,
  +            child_handles[i] = (HANDLE) _beginthreadex(NULL,
(unsigned)ap_worker_stacksize,
  +                                                      
(LPTHREAD_START_ROUTINE) worker_main,
                                                          (void *) i,
0, &tid);
               if (child_handles[i] == 0) {
                   ap_log_error(APLOG_MARK, APLOG_CRIT,
apr_get_os_error(), ap_server_conf,
  
  
  
  1.18      +1 -0      httpd-2.0/server/mpm/winnt/mpm.h
  
  Index: mpm.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm.h,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- mpm.h     9 Feb 2004 20:40:51 -0000       1.17
  +++ mpm.h     11 Mar 2004 03:57:50 -0000      1.18
  @@ -30,6 +30,7 @@
   #define AP_MPM_WANT_SET_COREDUMPDIR
   #define AP_MPM_WANT_SET_SCOREBOARD
   #define AP_MPM_WANT_SET_MAX_MEM_FREE
  +#define AP_MPM_WANT_SET_STACKSIZE
   
   extern int ap_threads_per_child;
   extern int ap_thread_limit;
  
  
  
  1.21      +1 -0      httpd-2.0/server/mpm/worker/mpm.h
  
  Index: mpm.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/worker/mpm.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- mpm.h     9 Feb 2004 20:40:52 -0000       1.20
  +++ mpm.h     11 Mar 2004 03:57:50 -0000      1.21
  @@ -34,6 +34,7 @@
   #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
   #define AP_MPM_WANT_SIGNAL_SERVER
   #define AP_MPM_WANT_SET_MAX_MEM_FREE
  +#define AP_MPM_WANT_SET_STACKSIZE
   #define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
   #define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
   
  
  
  
  1.150     +4 -0      httpd-2.0/server/mpm/worker/worker.c
  
  Index: worker.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v
  retrieving revision 1.149
  retrieving revision 1.150
  diff -u -r1.149 -r1.150
  --- worker.c  9 Feb 2004 20:40:52 -0000       1.149
  +++ worker.c  11 Mar 2004 03:57:50 -0000      1.150
  @@ -1164,6 +1164,10 @@
       /* 0 means PTHREAD_CREATE_JOINABLE */
       apr_threadattr_detach_set(thread_attr, 0);
   
  +    if (ap_worker_stacksize != 0) {
  +        apr_threadattr_stacksize_set(thread_attr,
ap_worker_stacksize);
  +    }
  +    
       ts->threads = threads;
       ts->listener = NULL;
       ts->child_num_arg = child_num_arg;
  
  
  

Reply via email to