HI,

Attached is a patch that enables the mpm_query function
to return more information. It returns for instance,
the HARD_SERVER_LIMIT and HARD_THREAD_LIMIT.

Note: I only was able to test it in the preforked
MPM, due to my system I guess.

Harrie


-- 
phone: +39-3474932300
http://www.lisanza.net/
diff -rC 3 ../httpd-2_0_16-orig/include/ap_mpm.h ./include/ap_mpm.h
*** ../httpd-2_0_16-orig/include/ap_mpm.h       Fri Mar  2 23:46:31 2001
--- ./include/ap_mpm.h  Wed Apr 11 17:37:07 2001
***************
*** 147,156 ****
      apr_procattr_t *attr, 
      apr_pool_t *p);
  
  
! #define AP_MPMQ_MAX_DAEMONS 1    /* Max # of daemons     */
! #define AP_MPMQ_IS_THREADED 2    /* MPM can do threading */
! #define AP_MPMQ_IS_FORKED   3    /* MPM can do forking   */
  
  /**
   * Query a property of the current MPM.  
--- 147,167 ----
      apr_procattr_t *attr, 
      apr_pool_t *p);
  
+ /* The MPM types below should actually a string which enables better identification 
+*/
+ #define AP_MPMQ_BEOS               1    /* MPM:Beos                   */
+ #define AP_MPMQ_PERCHILD           2    /* MPM:perchild               */
+ #define AP_MPMQ_PREFORK            3    /* MPM:prefork                */
+ #define AP_MPMQ_SPMT_OS2           4    /* MPM:spmt_os2               */
+ #define AP_MPMQ_WINNT              5    /* MPM:winnt                  */
+ #define AP_MPMQ_THREADED           6    /* MPM:threaded               */
  
! #define AP_MPMQ_MPMTYPE            1    /* MPM type choosen           */
! #define AP_MPMQ_IS_THREADED        2    /* MPM can do threading       */
! #define AP_MPMQ_IS_FORKED          3    /* MPM can do forking         */
! #define AP_MPMQ_HARD_LIMIT_DAEMONS 4    /* The compiled max # deamons */
! #define AP_MPMQ_HARD_LIMIT_THREADS 5    /* The compiled max # threads */
! #define AP_MPMQ_MAX_DAEMONS        6    /* Max # of daemons           */
! #define AP_MPMQ_MAX_THREADS        7    /* Max # of threads           */
  
  /**
   * Query a property of the current MPM.  
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/beos/beos.c ./server/mpm/beos/beos.c
*** ../httpd-2_0_16-orig/server/mpm/beos/beos.c Fri Mar 30 22:01:49 2001
--- ./server/mpm/beos/beos.c    Wed Apr 11 17:42:14 2001
***************
*** 653,666 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = ap_max_child_assigned;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 653,678 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_BEOS;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = ap_max_child_assigned;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = ap_threads_per_child;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/perchild/perchild.c 
./server/mpm/perchild/perchild.c
*** ../httpd-2_0_16-orig/server/mpm/perchild/perchild.c Tue Apr  3 05:19:56 2001
--- ./server/mpm/perchild/perchild.c    Wed Apr 11 17:44:14 2001
***************
*** 218,231 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = ap_max_daemons_limit;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 218,243 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_PREFORK;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = ap_max_daemons_limit;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = max_threads;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/prefork/prefork.c 
./server/mpm/prefork/prefork.c
*** ../httpd-2_0_16-orig/server/mpm/prefork/prefork.c   Fri Mar  2 23:46:32 2001
--- ./server/mpm/prefork/prefork.c      Wed Apr 11 17:48:57 2001
***************
*** 305,318 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = ap_daemons_limit;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 0;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 305,330 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_PREFORK;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 0;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = ap_daemons_limit;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = ap_threads_per_child;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/spmt_os2/spmt_os2.c 
./server/mpm/spmt_os2/spmt_os2.c
*** ../httpd-2_0_16-orig/server/mpm/spmt_os2/spmt_os2.c Fri Mar  2 23:46:32 2001
--- ./server/mpm/spmt_os2/spmt_os2.c    Wed Apr 11 17:45:24 2001
***************
*** 881,894 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = max_daemons_limit;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 881,906 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_SPMT_OS2;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = max_daemons_limit;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = ap_threads_per_child;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/threaded/threaded.c 
./server/mpm/threaded/threaded.c
*** ../httpd-2_0_16-orig/server/mpm/threaded/threaded.c Tue Apr  3 20:50:07 2001
--- ./server/mpm/threaded/threaded.c    Wed Apr 11 17:43:07 2001
***************
*** 174,187 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = ap_max_daemons_limit;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 174,199 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_THREADED;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 1;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = ap_max_daemons_limit;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = ap_threads_per_child;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
diff -rC 3 ../httpd-2_0_16-orig/server/mpm/winnt/mpm_winnt.c 
./server/mpm/winnt/mpm_winnt.c
*** ../httpd-2_0_16-orig/server/mpm/winnt/mpm_winnt.c   Tue Apr  3 03:09:25 2001
--- ./server/mpm/winnt/mpm_winnt.c      Wed Apr 11 17:47:03 2001
***************
*** 1536,1549 ****
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MAX_DAEMONS:
!             *result = MAXIMUM_WAIT_OBJECTS;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;
--- 1536,1561 ----
  AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
  {
      switch(query_code){
!         case AP_MPMQ_MPMTYPE:
!             *result = AP_MPMQ_WINNT;
              return APR_SUCCESS;
          case AP_MPMQ_IS_THREADED:
              *result = 1;
              return APR_SUCCESS;
          case AP_MPMQ_IS_FORKED:
              *result = 0;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_DAEMONS:
+             *result = HARD_SERVER_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_HARD_LIMIT_THREADS:
+             *result = HARD_THREAD_LIMIT;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_DAEMONS:
+             *result = MAXIMUM_WAIT_OBJECTS;
+             return APR_SUCCESS;
+         case AP_MPMQ_MAX_THREADS:
+             *result = ap_threads_per_child;
              return APR_SUCCESS;
      }
      return APR_ENOTIMPL;

Reply via email to