Le 19/07/2013 02:38, Valter Nogueira a écrit :
I don't know if this question belongs here.

While reading over internet how apache works I learned that different threading/multi-process models are called thru

ap_run_mpm

inded, main.c calls ap_run_mpm, but I don't figure out where it is defined nor how it is linked with the correct mpm model.

Thanks

Hi,

this is defined at line 92 of include/mpm.h
this is implemented at line 100 of server/mpm_common.c

All this is done via macro that is why you didn't find it easily.
After expansion, these macros ends up to a call to 'ap_hook_mpm' which must be implemented in the mpm module to register the right function to call.



Here is how it is expanded (using trunk version of both apr and httpd for line numbers):

line 100 of server/mpm_common.c
AP_IMPLEMENT_HOOK_RUN_FIRST(int, mpm,
(apr_pool_t *pconf, apr_pool_t *plog, server_rec *s),
                               (pconf, plog, s), DECLINED)

line 137 of ap_hooks.h, we have:
#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap,AP,ret,name,args_decl, \
                                                 args_use,decline)

==> APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap, AP, int, mpm, (apr_pool_t *pconf, apr_pool_t *plog, server_rec *s), (pconf, plog, s), DECLINED)

line 237 of apr/include/apr_hooks.h
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \
   APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
   link##_DECLARE(ret) ns##_run_##name args_decl \
       { \
   ...

line 143 of apr/include/apr_hooks.h
   #define APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \ const char * const *aszSucc,int nOrder) \
       { \
   ...


==> AP_DECLARE(void) ap_hook_mpm(...


Then, in each mpm module, you have a call to the ap_hook_mpm to register the function to get called via the hook. line 2292 of mpm/worker.c ap_hook_mpm(worker_run, NULL, NULL, APR_HOOK_MIDDLE); line 3393 of mpm/event.c ap_hook_mpm(event_run, NULL, NULL, APR_HOOK_MIDDLE);
...


I hope this is clear enough and helps you.
You can also get some information about hooks in https://httpd.apache.org/docs/2.4/developer/hooks.html

CJ


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to