annotate src/core/ngx_cycle.h @ 6133:af7eba90645d

Win32: shared memory base addresses and remapping. Two mechanisms are implemented to make it possible to store pointers in shared memory on Windows, in particular on Windows Vista and later versions with ASLR: - The ngx_shm_remap() function added to allow remapping of a shared memory zone to the address originally used for it in the master process. While important, it doesn't solve the problem by itself as in many cases it's not possible to use the address because of conflicts with other allocations. - We now create mappings at the same address in all processes by starting mappings at predefined addresses normally unused by newborn processes. These two mechanisms combined allow to use shared memory on Windows almost without problems, including reloads. Based on the patch by Sergey Brester: http://mailman.nginx.org/pipermail/nginx-devel/2015-April/006836.html
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 27 Apr 2015 18:25:42 +0300
parents 967594ba7571
children 1b7e246e6b38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 414
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 414
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3880
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 414
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 414
diff changeset
6
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 414
diff changeset
7
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #ifndef _NGX_CYCLE_H_INCLUDED_
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #define _NGX_CYCLE_H_INCLUDED_
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_config.h>
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <ngx_core.h>
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
16 #ifndef NGX_CYCLE_POOL_SIZE
5124
5482671df278 Use NGX_DEFAULT_POOL_SIZE macro where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
17 #define NGX_CYCLE_POOL_SIZE NGX_DEFAULT_POOL_SIZE
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
18 #endif
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
19
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
20
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
21 #define NGX_DEBUG_POINTS_STOP 1
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
22 #define NGX_DEBUG_POINTS_ABORT 2
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
23
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
24
972
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
25 typedef struct ngx_shm_zone_s ngx_shm_zone_t;
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
26
993
1b9a4d92173f pass the inherited shm_zone data
Igor Sysoev <igor@sysoev.ru>
parents: 972
diff changeset
27 typedef ngx_int_t (*ngx_shm_zone_init_pt) (ngx_shm_zone_t *zone, void *data);
972
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
28
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
29 struct ngx_shm_zone_s {
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
30 void *data;
860
201d017ea470 slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
31 ngx_shm_t shm;
972
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
32 ngx_shm_zone_init_pt init;
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
33 void *tag;
6103
79ddb0bdb273 Upstream: the "zone" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 6016
diff changeset
34 ngx_uint_t noreuse; /* unsigned noreuse:1; */
972
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
35 };
860
201d017ea470 slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
36
201d017ea470 slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
37
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 struct ngx_cycle_s {
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
39 void ****conf_ctx;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
40 ngx_pool_t *pool;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 311
diff changeset
41
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
42 ngx_log_t *log;
2785
d478379e51ac *) refactor error_log processing: listen socket log might inherit built-in
Igor Sysoev <igor@sysoev.ru>
parents: 2758
diff changeset
43 ngx_log_t new_log;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 311
diff changeset
44
5240
d8af1005e886 Core: fixed handling of "stderr" in error_log.
Vladimir Homutov <vl@nginx.com>
parents: 5124
diff changeset
45 ngx_uint_t log_use_stderr; /* unsigned log_use_stderr:1; */
d8af1005e886 Core: fixed handling of "stderr" in error_log.
Vladimir Homutov <vl@nginx.com>
parents: 5124
diff changeset
46
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
47 ngx_connection_t **files;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
48 ngx_connection_t *free_connections;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
49 ngx_uint_t free_connection_n;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
50
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
51 ngx_queue_t reusable_connections_queue;
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
52
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
53 ngx_array_t listening;
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4549
diff changeset
54 ngx_array_t paths;
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
55 ngx_list_t open_files;
860
201d017ea470 slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
56 ngx_list_t shared_memory;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
58 ngx_uint_t connection_n;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
59 ngx_uint_t files_n;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
60
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
61 ngx_connection_t *connections;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
62 ngx_event_t *read_events;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
63 ngx_event_t *write_events;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
65 ngx_cycle_t *old_cycle;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
67 ngx_str_t conf_file;
2073
01b71aa095cc -g switch
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
68 ngx_str_t conf_param;
2758
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
69 ngx_str_t conf_prefix;
77264e0157ad -p and --prefix=
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
70 ngx_str_t prefix;
860
201d017ea470 slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
71 ngx_str_t lock_file;
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 1069
diff changeset
72 ngx_str_t hostname;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 };
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
76 typedef struct {
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
77 ngx_flag_t daemon;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
78 ngx_flag_t master;
300
502b03d9d2a3 nginx-0.0.3-2004-03-31-00:31:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
79
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
80 ngx_msec_t timer_resolution;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
81
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
82 ngx_int_t worker_processes;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
83 ngx_int_t debug_points;
300
502b03d9d2a3 nginx-0.0.3-2004-03-31-00:31:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
84
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
85 ngx_int_t rlimit_nofile;
3762
89002ac695e5 worker_rlimit_core should be off_t
Igor Sysoev <igor@sysoev.ru>
parents: 3750
diff changeset
86 off_t rlimit_core;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
87
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
88 int priority;
300
502b03d9d2a3 nginx-0.0.3-2004-03-31-00:31:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
89
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
90 ngx_uint_t cpu_affinity_n;
4549
f31162fefe01 worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
91 uint64_t *cpu_affinity;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
92
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
93 char *username;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
94 ngx_uid_t user;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
95 ngx_gid_t group;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
96
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
97 ngx_str_t working_directory;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
98 ngx_str_t lock_file;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
99
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
100 ngx_str_t pid;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
101 ngx_str_t oldpid;
376
d0451e402e27 nginx-0.0.7-2004-07-05-10:55:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 336
diff changeset
102
1069
Igor Sysoev <igor@sysoev.ru>
parents: 993
diff changeset
103 ngx_array_t env;
Igor Sysoev <igor@sysoev.ru>
parents: 993
diff changeset
104 char **environment;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
105 } ngx_core_conf_t;
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
106
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
107
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
108 #define ngx_is_init_cycle(cycle) (cycle->conf_ctx == NULL)
605
5dac8c7fb71b nginx-0.3.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
109
5dac8c7fb71b nginx-0.3.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
110
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
112 ngx_int_t ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log);
311
11ff50a35d6d nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 300
diff changeset
113 void ngx_delete_pidfile(ngx_cycle_t *cycle);
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2716
diff changeset
114 ngx_int_t ngx_signal_process(ngx_cycle_t *cycle, char *sig);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
115 void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
1069
Igor Sysoev <igor@sysoev.ru>
parents: 993
diff changeset
116 char **ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
117 ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
4549
f31162fefe01 worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
118 uint64_t ngx_get_cpu_affinity(ngx_uint_t n);
972
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
119 ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
6e7a20529f53 ngx_shared_memory_add()
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
120 size_t size, void *tag);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 extern volatile ngx_cycle_t *ngx_cycle;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 extern ngx_array_t ngx_old_cycles;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents: 255
diff changeset
125 extern ngx_module_t ngx_core_module;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
126 extern ngx_uint_t ngx_test_config;
3750
ffbdaa3c70d6 the -q switch
Igor Sysoev <igor@sysoev.ru>
parents: 2785
diff changeset
127 extern ngx_uint_t ngx_quiet_mode;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 #endif /* _NGX_CYCLE_H_INCLUDED_ */