<code><span>int</span> ngx_cdecl
main(<span>int</span> argc, <span>char</span> *<span>
const
</span> *argv) <span>
{
cycle = ngx_init_cycle(&init_cycle);
{
<span>
if
</span> (ngx_conf_parse(&conf, &cycle->conf_file) != NGX_CONF_OK) { <span>
{
解析到http指令(进入ngx_http_block())
{
<span>
ngx_int_t (*preconfiguration)(ngx_conf_t *cf); <span>
</span>
ngx_int_t (*postconfiguration)(ngx_conf_t *cf); <span>
</span><span>void</span> *(*create_main_conf)(ngx_conf_t *cf); <span>
</span><span>char</span> *(*init_main_conf)(ngx_conf_t *cf, <span>void</span> *conf); <span>
</span><span>void</span> *(*create_srv_conf)(ngx_conf_t *cf); <span>
</span><span>char</span> *(*merge_srv_conf)(ngx_conf_t *cf, <span>void</span> *prev, <span>void</span> *conf); <span>
</span><span>void</span> *(*create_loc_conf)(ngx_conf_t *cf); <span>
</span><span>char</span> *(*merge_loc_conf)(ngx_conf_t *cf, <span>void</span> *prev, <span>void</span> *conf); <span>
</span>
} ngx_http_module_t;
同时,还有个执行顺序<span>4.5</span>:
<span>struct</span> ngx_command_s { <span>
</span>
ngx_str_t name;
ngx_uint_t type;
<span>char</span> *(*<span>set</span>)(ngx_conf_t *cf, ngx_command_t *cmd, <span>void</span> *conf);
ngx_uint_t conf;
ngx_uint_t offset;
<span>void</span> *post;
};
<span>
for
</span> (m = <span>0</span>; ngx_modules[m]; m++) {
<span>
if
</span> (module->create_main_conf) {ctx->main_conf[mi] = module->create_main_conf(cf);}
<span>
if
</span> (module->create_srv_conf) {ctx->srv_conf[mi] = module->create_srv_conf(cf);}
<span>
if
</span> (module->create_loc_conf) {ctx->loc_conf[mi] = module->create_loc_conf(cf);}
}
<span>
for
</span> (m = <span>0</span>; ngx_modules[m]; m++) {
<span>
if
</span> (module->preconfiguration) {<span>
if
</span> (module->preconfiguration(cf) != NGX_OK) {}
}
rv = ngx_conf_parse(cf, NULL);
{
<span>
</span> }
<span>
for
</span> (m = <span>0</span>; ngx_modules[m]; m++) {
<span>
if
</span> (module->init_main_conf) {rv = module->init_main_conf(cf, ctx->main_conf[mi]);}
rv = ngx_http_merge_servers(cf, cmcf, module, mi);
}
<span>
for
</span> (m = <span>0</span>; ngx_modules[m]; m++) {
<span>
if
</span> (module->postconfiguration) {<span>
if
</span> (module->postconfiguration(cf) != NGX_OK)}
}
}
}
<span>
line: <span>462</span><span>
if
</span> (ngx_shm_alloc(&shm_zone[i].shm) != NGX_OK) <span>
</span>
line: <span>466</span><span>
if
</span> (ngx_init_zone_pool(cycle, &shm_zone[i]) != NGX_OK)
<span>
</span>
line: <span>470</span><span>
if
</span> (shm_zone[i].init(&shm_zone[i], NULL) != NGX_OK) <span>
</span>
}
}
ngx_shm_zone_t *
ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, <span>void</span> *tag)
{
ngx_uint_t i;
ngx_shm_zone_t *shm_zone;
ngx_list_part_t *part;
<span>
</span>
part = &cf->cycle->shared_memory.part;
shm_zone = part->elts;
<span>
for
</span> (i = <span>0</span>; <span>
</span> ; i++) {
<span>
if
</span> (i >= part->nelts) {
<span>
if
</span> (part->next == NULL) {
<span>
break
</span>;
}
part = part->next;
shm_zone = part->elts;
i = <span>0</span>;
}
<span>
if
</span> (name->len != shm_zone[i].shm.name.len) {
<span>
continue
</span>;
}
<span>
if
</span> (ngx_strncmp(name->data, shm_zone[i].shm.name.data, name->len)
!= <span>0</span>)
{
<span>
continue
</span>;
}
<span>
if
</span> (tag != shm_zone[i].tag) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, <span>0</span>,
<span>
"the shared memory zone \"%V\" is "
</span><span>
"already declared for a different use"
</span>,
&shm_zone[i].shm.name);
<span>
return
</span> NULL;
}
<span>
if
</span> (size && size != shm_zone[i].shm.size) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, <span>0</span>,
<span>
"the size %uz of shared memory zone \"%V\" "
</span><span>
"conflicts with already declared size %uz"
</span>,
size, &shm_zone[i].shm.name, shm_zone[i].shm.size);
<span>
return
</span> NULL;
}
<span>
return
</span> &shm_zone[i];
}
shm_zone = ngx_list_push(&cf->cycle->shared_memory);
<span>
if
</span> (shm_zone == NULL) {
<span>
return
</span> NULL;
}
shm_zone->data = NULL;
shm_zone->shm.<span>log</span> = cf->cycle-><span>log</span>;
shm_zone->shm.size = size;
shm_zone->shm.name = *name;
shm_zone->shm.exists = <span>0</span>;
shm_zone->init = NULL;
shm_zone->tag = tag;
<span>
return
</span> shm_zone;
}</code>