It takes a while to figure out your explanation. And I not sure a get it.
When ap_run_mpm is called, what is called is a "hook function" for that is like a dynamic loaded function from a shared library. Is that correct? So, where is configured the function that will actually be called on each platform? Thanks Valter * * 2013/7/19 Christophe JAILLET <christophe.jail...@wanadoo.fr> > 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<https://httpd.apache.org/docs/2.4/developer/hooks.html> > > CJ > > > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > users-unsubscribe@httpd.**apache.org<users-unsubscr...@httpd.apache.org> > For additional commands, e-mail: users-h...@httpd.apache.org > >