blob: 551b6288ec00d4e944f1a4145483e1b33ef2a48d [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00004 * Copyright (C) Nginx, Inc.
Igor Sysoevd90282d2004-09-28 08:34:51 +00005 */
6
7
Igor Sysoev3c3ca172004-01-05 20:55:48 +00008#ifndef _NGX_CYCLE_H_INCLUDED_
9#define _NGX_CYCLE_H_INCLUDED_
10
11
12#include <ngx_config.h>
13#include <ngx_core.h>
14
15
Igor Sysoev02f742b2005-04-08 15:18:55 +000016#ifndef NGX_CYCLE_POOL_SIZE
17#define NGX_CYCLE_POOL_SIZE 16384
18#endif
19
20
Igor Sysoev1b735832004-11-11 14:07:14 +000021#define NGX_DEBUG_POINTS_STOP 1
22#define NGX_DEBUG_POINTS_ABORT 2
23
24
Igor Sysoev28c7f762007-01-02 23:54:14 +000025typedef struct ngx_shm_zone_s ngx_shm_zone_t;
26
Igor Sysoev4e77a2b2007-01-09 15:59:20 +000027typedef ngx_int_t (*ngx_shm_zone_init_pt) (ngx_shm_zone_t *zone, void *data);
Igor Sysoev28c7f762007-01-02 23:54:14 +000028
29struct ngx_shm_zone_s {
30 void *data;
Igor Sysoev67cd3362006-11-20 08:51:45 +000031 ngx_shm_t shm;
Igor Sysoev28c7f762007-01-02 23:54:14 +000032 ngx_shm_zone_init_pt init;
Igor Sysoev28c7f762007-01-02 23:54:14 +000033 void *tag;
34};
Igor Sysoev67cd3362006-11-20 08:51:45 +000035
36
Igor Sysoev3c3ca172004-01-05 20:55:48 +000037struct ngx_cycle_s {
Igor Sysoev42b12b32004-12-02 18:40:46 +000038 void ****conf_ctx;
39 ngx_pool_t *pool;
Igor Sysoev68df19d2004-04-15 15:34:36 +000040
Igor Sysoev42b12b32004-12-02 18:40:46 +000041 ngx_log_t *log;
Igor Sysoev0cd76ea2009-04-30 13:53:42 +000042 ngx_log_t new_log;
Igor Sysoev68df19d2004-04-15 15:34:36 +000043
Igor Sysoev31eb8c02005-09-23 11:02:22 +000044 ngx_connection_t **files;
45 ngx_connection_t *free_connections;
46 ngx_uint_t free_connection_n;
47
Igor Sysoev4956ac52011-04-04 12:26:53 +000048 ngx_queue_t reusable_connections_queue;
49
Igor Sysoev42b12b32004-12-02 18:40:46 +000050 ngx_array_t listening;
51 ngx_array_t pathes;
52 ngx_list_t open_files;
Igor Sysoev67cd3362006-11-20 08:51:45 +000053 ngx_list_t shared_memory;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000054
Igor Sysoev42b12b32004-12-02 18:40:46 +000055 ngx_uint_t connection_n;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000056 ngx_uint_t files_n;
57
Igor Sysoev78452232005-10-12 13:50:36 +000058 ngx_connection_t *connections;
59 ngx_event_t *read_events;
60 ngx_event_t *write_events;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000061
Igor Sysoev42b12b32004-12-02 18:40:46 +000062 ngx_cycle_t *old_cycle;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000063
Igor Sysoev42b12b32004-12-02 18:40:46 +000064 ngx_str_t conf_file;
Igor Sysoevb4fbdcf2008-06-30 12:35:16 +000065 ngx_str_t conf_param;
Igor Sysoev5ef370d2009-04-27 11:32:33 +000066 ngx_str_t conf_prefix;
67 ngx_str_t prefix;
Igor Sysoev67cd3362006-11-20 08:51:45 +000068 ngx_str_t lock_file;
Igor Sysoev3be52572008-05-16 14:39:06 +000069 ngx_str_t hostname;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000070};
71
72
Igor Sysoeva5362982004-03-04 07:04:55 +000073typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +000074 ngx_flag_t daemon;
75 ngx_flag_t master;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000076
Igor Sysoevc2068d02005-10-19 12:33:58 +000077 ngx_msec_t timer_resolution;
78
Igor Sysoev42b12b32004-12-02 18:40:46 +000079 ngx_int_t worker_processes;
80 ngx_int_t debug_points;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000081
Igor Sysoev31eb8c02005-09-23 11:02:22 +000082 ngx_int_t rlimit_nofile;
83 ngx_int_t rlimit_sigpending;
Igor Sysoev8c70e672010-09-15 15:24:21 +000084 off_t rlimit_core;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000085
Igor Sysoev42b12b32004-12-02 18:40:46 +000086 int priority;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000087
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +000088 ngx_uint_t cpu_affinity_n;
Ruslan Ermilovfbd32d42012-03-21 13:58:51 +000089 uint64_t *cpu_affinity;
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +000090
Igor Sysoev42b12b32004-12-02 18:40:46 +000091 char *username;
92 ngx_uid_t user;
93 ngx_gid_t group;
94
Igor Sysoev7b190b42005-06-07 15:56:31 +000095 ngx_str_t working_directory;
Igor Sysoevffe71442006-02-08 15:33:12 +000096 ngx_str_t lock_file;
Igor Sysoev7b190b42005-06-07 15:56:31 +000097
Igor Sysoev42b12b32004-12-02 18:40:46 +000098 ngx_str_t pid;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000099 ngx_str_t oldpid;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000100
Igor Sysoev8885f872007-01-20 19:26:48 +0000101 ngx_array_t env;
102 char **environment;
103
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000104#if (NGX_THREADS)
Igor Sysoev42b12b32004-12-02 18:40:46 +0000105 ngx_int_t worker_threads;
106 size_t thread_stack_size;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000107#endif
108
Igor Sysoeva5362982004-03-04 07:04:55 +0000109} ngx_core_conf_t;
110
111
Igor Sysoev2b979932004-07-07 15:01:00 +0000112typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +0000113 ngx_pool_t *pool; /* pcre's malloc() pool */
Igor Sysoev2b979932004-07-07 15:01:00 +0000114} ngx_core_tls_t;
115
116
Igor Sysoevffe71442006-02-08 15:33:12 +0000117#define ngx_is_init_cycle(cycle) (cycle->conf_ctx == NULL)
Igor Sysoev9e580192006-02-01 18:22:15 +0000118
119
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000120ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);
Igor Sysoevffe71442006-02-08 15:33:12 +0000121ngx_int_t ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log);
Igor Sysoev43f13192004-04-12 16:38:09 +0000122void ngx_delete_pidfile(ngx_cycle_t *cycle);
Igor Sysoevc8e9f262009-04-21 20:25:49 +0000123ngx_int_t ngx_signal_process(ngx_cycle_t *cycle, char *sig);
Igor Sysoeva5362982004-03-04 07:04:55 +0000124void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
Igor Sysoev8885f872007-01-20 19:26:48 +0000125char **ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last);
Igor Sysoeva5362982004-03-04 07:04:55 +0000126ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
Ruslan Ermilovfbd32d42012-03-21 13:58:51 +0000127uint64_t ngx_get_cpu_affinity(ngx_uint_t n);
Igor Sysoev28c7f762007-01-02 23:54:14 +0000128ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
129 size_t size, void *tag);
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000130
131
132extern volatile ngx_cycle_t *ngx_cycle;
133extern ngx_array_t ngx_old_cycles;
Igor Sysoeva5362982004-03-04 07:04:55 +0000134extern ngx_module_t ngx_core_module;
Igor Sysoev630ad0c2004-04-16 05:14:16 +0000135extern ngx_uint_t ngx_test_config;
Igor Sysoev2cb30f12010-09-02 13:43:02 +0000136extern ngx_uint_t ngx_quiet_mode;
Igor Sysoev2b979932004-07-07 15:01:00 +0000137#if (NGX_THREADS)
138extern ngx_tls_key_t ngx_core_tls_key;
139#endif
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000140
141
142#endif /* _NGX_CYCLE_H_INCLUDED_ */