blob: e14983d6f1b7e439de7a4f0d6d4d204745085e49 [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Igor Sysoevd90282d2004-09-28 08:34:51 +00004 */
5
6
Igor Sysoev3c3ca172004-01-05 20:55:48 +00007#ifndef _NGX_CYCLE_H_INCLUDED_
8#define _NGX_CYCLE_H_INCLUDED_
9
10
11#include <ngx_config.h>
12#include <ngx_core.h>
13
14
Igor Sysoev02f742b2005-04-08 15:18:55 +000015#ifndef NGX_CYCLE_POOL_SIZE
16#define NGX_CYCLE_POOL_SIZE 16384
17#endif
18
19
Igor Sysoev1b735832004-11-11 14:07:14 +000020#define NGX_DEBUG_POINTS_STOP 1
21#define NGX_DEBUG_POINTS_ABORT 2
22
23
Igor Sysoev28c7f762007-01-02 23:54:14 +000024typedef struct ngx_shm_zone_s ngx_shm_zone_t;
25
Igor Sysoev4e77a2b2007-01-09 15:59:20 +000026typedef ngx_int_t (*ngx_shm_zone_init_pt) (ngx_shm_zone_t *zone, void *data);
Igor Sysoev28c7f762007-01-02 23:54:14 +000027
28struct ngx_shm_zone_s {
29 void *data;
Igor Sysoev67cd3362006-11-20 08:51:45 +000030 ngx_shm_t shm;
Igor Sysoev28c7f762007-01-02 23:54:14 +000031 ngx_shm_zone_init_pt init;
Igor Sysoev28c7f762007-01-02 23:54:14 +000032 void *tag;
33};
Igor Sysoev67cd3362006-11-20 08:51:45 +000034
35
Igor Sysoev3c3ca172004-01-05 20:55:48 +000036struct ngx_cycle_s {
Igor Sysoev42b12b32004-12-02 18:40:46 +000037 void ****conf_ctx;
38 ngx_pool_t *pool;
Igor Sysoev68df19d2004-04-15 15:34:36 +000039
Igor Sysoev42b12b32004-12-02 18:40:46 +000040 ngx_log_t *log;
Igor Sysoev0cd76ea2009-04-30 13:53:42 +000041 ngx_log_t new_log;
Igor Sysoev68df19d2004-04-15 15:34:36 +000042
Igor Sysoev31eb8c02005-09-23 11:02:22 +000043 ngx_connection_t **files;
44 ngx_connection_t *free_connections;
45 ngx_uint_t free_connection_n;
46
Igor Sysoev4956ac52011-04-04 12:26:53 +000047 ngx_queue_t reusable_connections_queue;
48
Igor Sysoev42b12b32004-12-02 18:40:46 +000049 ngx_array_t listening;
50 ngx_array_t pathes;
51 ngx_list_t open_files;
Igor Sysoev67cd3362006-11-20 08:51:45 +000052 ngx_list_t shared_memory;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000053
Igor Sysoev42b12b32004-12-02 18:40:46 +000054 ngx_uint_t connection_n;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000055 ngx_uint_t files_n;
56
Igor Sysoev78452232005-10-12 13:50:36 +000057 ngx_connection_t *connections;
58 ngx_event_t *read_events;
59 ngx_event_t *write_events;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000060
Igor Sysoev42b12b32004-12-02 18:40:46 +000061 ngx_cycle_t *old_cycle;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000062
Igor Sysoev42b12b32004-12-02 18:40:46 +000063 ngx_str_t conf_file;
Igor Sysoevb4fbdcf2008-06-30 12:35:16 +000064 ngx_str_t conf_param;
Igor Sysoev5ef370d2009-04-27 11:32:33 +000065 ngx_str_t conf_prefix;
66 ngx_str_t prefix;
Igor Sysoev67cd3362006-11-20 08:51:45 +000067 ngx_str_t lock_file;
Igor Sysoev3be52572008-05-16 14:39:06 +000068 ngx_str_t hostname;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000069};
70
71
Igor Sysoeva5362982004-03-04 07:04:55 +000072typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +000073 ngx_flag_t daemon;
74 ngx_flag_t master;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000075
Igor Sysoevc2068d02005-10-19 12:33:58 +000076 ngx_msec_t timer_resolution;
77
Igor Sysoev42b12b32004-12-02 18:40:46 +000078 ngx_int_t worker_processes;
79 ngx_int_t debug_points;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000080
Igor Sysoev31eb8c02005-09-23 11:02:22 +000081 ngx_int_t rlimit_nofile;
82 ngx_int_t rlimit_sigpending;
Igor Sysoev8c70e672010-09-15 15:24:21 +000083 off_t rlimit_core;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000084
Igor Sysoev42b12b32004-12-02 18:40:46 +000085 int priority;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000086
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +000087 ngx_uint_t cpu_affinity_n;
88 u_long *cpu_affinity;
89
Igor Sysoev42b12b32004-12-02 18:40:46 +000090 char *username;
91 ngx_uid_t user;
92 ngx_gid_t group;
93
Igor Sysoev7b190b42005-06-07 15:56:31 +000094 ngx_str_t working_directory;
Igor Sysoevffe71442006-02-08 15:33:12 +000095 ngx_str_t lock_file;
Igor Sysoev7b190b42005-06-07 15:56:31 +000096
Igor Sysoev42b12b32004-12-02 18:40:46 +000097 ngx_str_t pid;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000098 ngx_str_t oldpid;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +000099
Igor Sysoev8885f872007-01-20 19:26:48 +0000100 ngx_array_t env;
101 char **environment;
102
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000103#if (NGX_THREADS)
Igor Sysoev42b12b32004-12-02 18:40:46 +0000104 ngx_int_t worker_threads;
105 size_t thread_stack_size;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000106#endif
107
Igor Sysoeva5362982004-03-04 07:04:55 +0000108} ngx_core_conf_t;
109
110
Igor Sysoev2b979932004-07-07 15:01:00 +0000111typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +0000112 ngx_pool_t *pool; /* pcre's malloc() pool */
Igor Sysoev2b979932004-07-07 15:01:00 +0000113} ngx_core_tls_t;
114
115
Igor Sysoevffe71442006-02-08 15:33:12 +0000116#define ngx_is_init_cycle(cycle) (cycle->conf_ctx == NULL)
Igor Sysoev9e580192006-02-01 18:22:15 +0000117
118
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000119ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);
Igor Sysoevffe71442006-02-08 15:33:12 +0000120ngx_int_t ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log);
Igor Sysoev43f13192004-04-12 16:38:09 +0000121void ngx_delete_pidfile(ngx_cycle_t *cycle);
Igor Sysoevc8e9f262009-04-21 20:25:49 +0000122ngx_int_t ngx_signal_process(ngx_cycle_t *cycle, char *sig);
Igor Sysoeva5362982004-03-04 07:04:55 +0000123void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
Igor Sysoev8885f872007-01-20 19:26:48 +0000124char **ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last);
Igor Sysoeva5362982004-03-04 07:04:55 +0000125ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +0000126u_long ngx_get_cpu_affinity(ngx_uint_t n);
Igor Sysoev28c7f762007-01-02 23:54:14 +0000127ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
128 size_t size, void *tag);
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000129
130
131extern volatile ngx_cycle_t *ngx_cycle;
132extern ngx_array_t ngx_old_cycles;
Igor Sysoeva5362982004-03-04 07:04:55 +0000133extern ngx_module_t ngx_core_module;
Igor Sysoev630ad0c2004-04-16 05:14:16 +0000134extern ngx_uint_t ngx_test_config;
Igor Sysoev2cb30f12010-09-02 13:43:02 +0000135extern ngx_uint_t ngx_quiet_mode;
Igor Sysoev2b979932004-07-07 15:01:00 +0000136#if (NGX_THREADS)
137extern ngx_tls_key_t ngx_core_tls_key;
138#endif
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000139
140
141#endif /* _NGX_CYCLE_H_INCLUDED_ */