blob: e3905885d1f9e0de09414d400d5fa7762ee081bf [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 Sysoev42b12b32004-12-02 18:40:46 +000047 ngx_array_t listening;
48 ngx_array_t pathes;
49 ngx_list_t open_files;
Igor Sysoev67cd3362006-11-20 08:51:45 +000050 ngx_list_t shared_memory;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000051
Igor Sysoev42b12b32004-12-02 18:40:46 +000052 ngx_uint_t connection_n;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000053 ngx_uint_t files_n;
54
Igor Sysoev78452232005-10-12 13:50:36 +000055 ngx_connection_t *connections;
56 ngx_event_t *read_events;
57 ngx_event_t *write_events;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000058
Igor Sysoev42b12b32004-12-02 18:40:46 +000059 ngx_cycle_t *old_cycle;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000060
Igor Sysoev42b12b32004-12-02 18:40:46 +000061 ngx_str_t conf_file;
Igor Sysoevb4fbdcf2008-06-30 12:35:16 +000062 ngx_str_t conf_param;
Igor Sysoev5ef370d2009-04-27 11:32:33 +000063 ngx_str_t conf_prefix;
64 ngx_str_t prefix;
Igor Sysoev67cd3362006-11-20 08:51:45 +000065 ngx_str_t lock_file;
Igor Sysoev3be52572008-05-16 14:39:06 +000066 ngx_str_t hostname;
Igor Sysoev3c3ca172004-01-05 20:55:48 +000067};
68
69
Igor Sysoeva5362982004-03-04 07:04:55 +000070typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +000071 ngx_flag_t daemon;
72 ngx_flag_t master;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000073
Igor Sysoevc2068d02005-10-19 12:33:58 +000074 ngx_msec_t timer_resolution;
75
Igor Sysoev42b12b32004-12-02 18:40:46 +000076 ngx_int_t worker_processes;
77 ngx_int_t debug_points;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000078
Igor Sysoev31eb8c02005-09-23 11:02:22 +000079 ngx_int_t rlimit_nofile;
80 ngx_int_t rlimit_sigpending;
Igor Sysoev888ea842006-12-24 18:13:06 +000081 size_t rlimit_core;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000082
Igor Sysoev42b12b32004-12-02 18:40:46 +000083 int priority;
Igor Sysoeva741f8d2004-03-30 20:31:58 +000084
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +000085 ngx_uint_t cpu_affinity_n;
86 u_long *cpu_affinity;
87
Igor Sysoev42b12b32004-12-02 18:40:46 +000088 char *username;
89 ngx_uid_t user;
90 ngx_gid_t group;
91
Igor Sysoev7b190b42005-06-07 15:56:31 +000092 ngx_str_t working_directory;
Igor Sysoevffe71442006-02-08 15:33:12 +000093 ngx_str_t lock_file;
Igor Sysoev7b190b42005-06-07 15:56:31 +000094
Igor Sysoev42b12b32004-12-02 18:40:46 +000095 ngx_str_t pid;
Igor Sysoev31eb8c02005-09-23 11:02:22 +000096 ngx_str_t oldpid;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +000097
Igor Sysoev8885f872007-01-20 19:26:48 +000098 ngx_array_t env;
99 char **environment;
100
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000101#if (NGX_THREADS)
Igor Sysoev42b12b32004-12-02 18:40:46 +0000102 ngx_int_t worker_threads;
103 size_t thread_stack_size;
Igor Sysoev32fcd5c2004-07-05 06:55:54 +0000104#endif
105
Igor Sysoeva5362982004-03-04 07:04:55 +0000106} ngx_core_conf_t;
107
108
Igor Sysoev2b979932004-07-07 15:01:00 +0000109typedef struct {
Igor Sysoev42b12b32004-12-02 18:40:46 +0000110 ngx_pool_t *pool; /* pcre's malloc() pool */
Igor Sysoev2b979932004-07-07 15:01:00 +0000111} ngx_core_tls_t;
112
113
Igor Sysoevffe71442006-02-08 15:33:12 +0000114#define ngx_is_init_cycle(cycle) (cycle->conf_ctx == NULL)
Igor Sysoev9e580192006-02-01 18:22:15 +0000115
116
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000117ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);
Igor Sysoevffe71442006-02-08 15:33:12 +0000118ngx_int_t ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log);
Igor Sysoev43f13192004-04-12 16:38:09 +0000119void ngx_delete_pidfile(ngx_cycle_t *cycle);
Igor Sysoevc8e9f262009-04-21 20:25:49 +0000120ngx_int_t ngx_signal_process(ngx_cycle_t *cycle, char *sig);
Igor Sysoeva5362982004-03-04 07:04:55 +0000121void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
Igor Sysoev8885f872007-01-20 19:26:48 +0000122char **ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last);
Igor Sysoeva5362982004-03-04 07:04:55 +0000123ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
Igor Sysoev0e5dc5c2005-11-15 13:30:52 +0000124u_long ngx_get_cpu_affinity(ngx_uint_t n);
Igor Sysoev28c7f762007-01-02 23:54:14 +0000125ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
126 size_t size, void *tag);
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000127
128
129extern volatile ngx_cycle_t *ngx_cycle;
130extern ngx_array_t ngx_old_cycles;
Igor Sysoeva5362982004-03-04 07:04:55 +0000131extern ngx_module_t ngx_core_module;
Igor Sysoev630ad0c2004-04-16 05:14:16 +0000132extern ngx_uint_t ngx_test_config;
Igor Sysoev2b979932004-07-07 15:01:00 +0000133#if (NGX_THREADS)
134extern ngx_tls_key_t ngx_core_tls_key;
135#endif
Igor Sysoev3c3ca172004-01-05 20:55:48 +0000136
137
138#endif /* _NGX_CYCLE_H_INCLUDED_ */