annotate src/core/ngx_module.c @ 9274:46ecad404a29 default tip

Mail: reset imap tag to empty after authentication attempt. We need to reset the imap tag to empty after an authentication attempt completes, otherwise if the next line parsed is incomplete with no tag (e.g. empty line) then we use the "tag" from the previous buffer which is now definitely wrong and has been partially overwritten with the most recently read data (e.g. CRLF). An example before this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: S: obar BAD invalid command Then with this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: * BAD invalid command
author Rob Mueller <robm@fastmailteam.com>
date Wed, 15 May 2024 10:06:00 +0300
parents 3600bbfb43e3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2 /*
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4 * Copyright (C) Maxim Dounin
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 * Copyright (C) Nginx, Inc.
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 */
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 #include <ngx_config.h>
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 #include <ngx_core.h>
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
13 #define NGX_MAX_DYNAMIC_MODULES 128
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
14
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
15
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
16 static ngx_uint_t ngx_module_index(ngx_cycle_t *cycle);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
17 static ngx_uint_t ngx_module_ctx_index(ngx_cycle_t *cycle, ngx_uint_t type,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
18 ngx_uint_t index);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
19
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
20
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
21 ngx_uint_t ngx_max_module;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
22 static ngx_uint_t ngx_modules_n;
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 ngx_int_t
6429
3600bbfb43e3 Fixed compilation with -Wmissing-prototypes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6417
diff changeset
26 ngx_preinit_modules(void)
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 {
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 ngx_uint_t i;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 for (i = 0; ngx_modules[i]; i++) {
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
31 ngx_modules[i]->index = i;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
32 ngx_modules[i]->name = ngx_module_names[i];
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
35 ngx_modules_n = i;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
36 ngx_max_module = ngx_modules_n + NGX_MAX_DYNAMIC_MODULES;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
37
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
38 return NGX_OK;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
39 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
40
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
41
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
42 ngx_int_t
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
43 ngx_cycle_modules(ngx_cycle_t *cycle)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
44 {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
45 /*
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
46 * create a list of modules to be used for this cycle,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
47 * copy static modules to it
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
48 */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
49
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
50 cycle->modules = ngx_pcalloc(cycle->pool, (ngx_max_module + 1)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
51 * sizeof(ngx_module_t *));
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
52 if (cycle->modules == NULL) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
53 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
54 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
55
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
56 ngx_memcpy(cycle->modules, ngx_modules,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
57 ngx_modules_n * sizeof(ngx_module_t *));
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
58
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
59 cycle->modules_n = ngx_modules_n;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
60
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 return NGX_OK;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 ngx_int_t
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 ngx_init_modules(ngx_cycle_t *cycle)
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 {
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 ngx_uint_t i;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6378
diff changeset
70 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6378
diff changeset
71 if (cycle->modules[i]->init_module) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6378
diff changeset
72 if (cycle->modules[i]->init_module(cycle) != NGX_OK) {
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 return NGX_ERROR;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 return NGX_OK;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 ngx_int_t
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 ngx_count_modules(ngx_cycle_t *cycle, ngx_uint_t type)
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 {
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
85 ngx_uint_t i, next, max;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
86 ngx_module_t *module;
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
88 next = 0;
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 max = 0;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 /* count appropriate modules, set up their indices */
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6378
diff changeset
93 for (i = 0; cycle->modules[i]; i++) {
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
94 module = cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
95
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
96 if (module->type != type) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
97 continue;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
98 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
99
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
100 if (module->ctx_index != NGX_MODULE_UNSET_INDEX) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
101
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
102 /* if ctx_index was assigned, preserve it */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
103
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
104 if (module->ctx_index > max) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
105 max = module->ctx_index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
106 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
107
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
108 if (module->ctx_index == next) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
109 next++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
110 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
111
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 continue;
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
115 /* search for some free index */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
116
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
117 module->ctx_index = ngx_module_ctx_index(cycle, type, next);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
118
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
119 if (module->ctx_index > max) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
120 max = module->ctx_index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
121 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
122
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
123 next = module->ctx_index + 1;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
124 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
125
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
126 /*
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
127 * make sure the number returned is big enough for previous
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
128 * cycle as well, else there will be problems if the number
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
129 * will be stored in a global variable (as it's used to be)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
130 * and we'll have to roll back to the previous cycle
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
131 */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
132
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
133 if (cycle->old_cycle && cycle->old_cycle->modules) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
134
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
135 for (i = 0; cycle->old_cycle->modules[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
136 module = cycle->old_cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
137
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
138 if (module->type != type) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
139 continue;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
140 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
141
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
142 if (module->ctx_index > max) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
143 max = module->ctx_index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
144 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
145 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
146 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
147
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
148 /* prevent loading of additional modules */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
149
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
150 cycle->modules_used = 1;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
151
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
152 return max + 1;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
153 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
154
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
155
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
156 ngx_int_t
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
157 ngx_add_module(ngx_conf_t *cf, ngx_str_t *file, ngx_module_t *module,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
158 char **order)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
159 {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
160 void *rv;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
161 ngx_uint_t i, m, before;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
162 ngx_core_module_t *core_module;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
163
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
164 if (cf->cycle->modules_n >= ngx_max_module) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
165 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
166 "too many modules loaded");
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
167 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
168 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
169
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
170 if (module->version != nginx_version) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
171 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
172 "module \"%V\" version %ui instead of %ui",
6394
5fe617f38222 Dynamic modules: fixed a version mismatch message (ticket #898).
Ruslan Ermilov <ru@nginx.com>
parents: 6383
diff changeset
173 file, module->version, (ngx_uint_t) nginx_version);
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
174 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
175 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
176
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
177 if (ngx_strcmp(module->signature, NGX_MODULE_SIGNATURE) != 0) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
178 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
179 "module \"%V\" is not binary compatible",
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
180 file);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
181 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
182 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
183
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
184 for (m = 0; cf->cycle->modules[m]; m++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
185 if (ngx_strcmp(cf->cycle->modules[m]->name, module->name) == 0) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
186 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
187 "module \"%s\" is already loaded",
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
188 module->name);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
189 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
190 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
191 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
192
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
193 /*
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
194 * if the module wasn't previously loaded, assign an index
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
195 */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
196
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
197 if (module->index == NGX_MODULE_UNSET_INDEX) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
198 module->index = ngx_module_index(cf->cycle);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
199
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
200 if (module->index >= ngx_max_module) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
201 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
202 "too many modules loaded");
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
203 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
204 }
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 }
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
207 /*
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
208 * put the module into the cycle->modules array
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
209 */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
210
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
211 before = cf->cycle->modules_n;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
212
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
213 if (order) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
214 for (i = 0; order[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
215 if (ngx_strcmp(order[i], module->name) == 0) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
216 i++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
217 break;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
218 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
219 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
220
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
221 for ( /* void */ ; order[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
222
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
223 #if 0
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
224 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cf->log, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
225 "module: %s before %s",
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
226 module->name, order[i]);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
227 #endif
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
228
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
229 for (m = 0; m < before; m++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
230 if (ngx_strcmp(cf->cycle->modules[m]->name, order[i]) == 0) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
231
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
232 ngx_log_debug3(NGX_LOG_DEBUG_CORE, cf->log, 0,
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
233 "module: %s before %s:%i",
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
234 module->name, order[i], m);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
235
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
236 before = m;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
237 break;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
238 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
239 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
240 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
241 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
242
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
243 /* put the module before modules[before] */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
244
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
245 if (before != cf->cycle->modules_n) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
246 ngx_memmove(&cf->cycle->modules[before + 1],
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
247 &cf->cycle->modules[before],
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
248 (cf->cycle->modules_n - before) * sizeof(ngx_module_t *));
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
249 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
250
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
251 cf->cycle->modules[before] = module;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
252 cf->cycle->modules_n++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
253
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
254 if (module->type == NGX_CORE_MODULE) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
255
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
256 /*
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
257 * we are smart enough to initialize core modules;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
258 * other modules are expected to be loaded before
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
259 * initialization - e.g., http modules must be loaded
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
260 * before http{} block
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
261 */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
262
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
263 core_module = module->ctx;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
264
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
265 if (core_module->create_conf) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
266 rv = core_module->create_conf(cf->cycle);
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
267 if (rv == NULL) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
268 return NGX_ERROR;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
269 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
270
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
271 cf->cycle->conf_ctx[module->index] = rv;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
272 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
273 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
274
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
275 return NGX_OK;
6378
0f203a2af17c Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 }
6383
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
277
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
278
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
279 static ngx_uint_t
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
280 ngx_module_index(ngx_cycle_t *cycle)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
281 {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
282 ngx_uint_t i, index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
283 ngx_module_t *module;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
284
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
285 index = 0;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
286
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
287 again:
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
288
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
289 /* find an unused index */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
290
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
291 for (i = 0; cycle->modules[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
292 module = cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
293
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
294 if (module->index == index) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
295 index++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
296 goto again;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
297 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
298 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
299
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
300 /* check previous cycle */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
301
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
302 if (cycle->old_cycle && cycle->old_cycle->modules) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
303
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
304 for (i = 0; cycle->old_cycle->modules[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
305 module = cycle->old_cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
306
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
307 if (module->index == index) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
308 index++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
309 goto again;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
310 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
311 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
312 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
313
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
314 return index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
315 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
316
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
317
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
318 static ngx_uint_t
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
319 ngx_module_ctx_index(ngx_cycle_t *cycle, ngx_uint_t type, ngx_uint_t index)
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
320 {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
321 ngx_uint_t i;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
322 ngx_module_t *module;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
323
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
324 again:
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
325
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
326 /* find an unused ctx_index */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
327
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
328 for (i = 0; cycle->modules[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
329 module = cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
330
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
331 if (module->type != type) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
332 continue;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
333 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
334
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
335 if (module->ctx_index == index) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
336 index++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
337 goto again;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
338 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
339 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
340
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
341 /* check previous cycle */
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
342
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
343 if (cycle->old_cycle && cycle->old_cycle->modules) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
344
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
345 for (i = 0; cycle->old_cycle->modules[i]; i++) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
346 module = cycle->old_cycle->modules[i];
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
347
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
348 if (module->type != type) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
349 continue;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
350 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
351
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
352 if (module->ctx_index == index) {
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
353 index++;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
354 goto again;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
355 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
356 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
357 }
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
358
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
359 return index;
85dea406e18f Dynamic modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6379
diff changeset
360 }