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;