xref: /unit/src/nxt_runtime.h (revision 1998:c8790d2a89bb)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Valentin V. Bartenev
5  * Copyright (C) NGINX, Inc.
6  */
7 
8 #ifndef _NXT_RUNTIME_H_INCLUDED_
9 #define _NXT_RUNTIME_H_INCLUDED_
10 
11 
12 typedef void (*nxt_runtime_cont_t)(nxt_task_t *task, nxt_uint_t status);
13 
14 
15 struct nxt_runtime_s {
16     nxt_mp_t               *mem_pool;
17 
18     nxt_array_t            *inherited_sockets;  /* of nxt_listen_socket_t */
19     nxt_array_t            *listen_sockets;     /* of nxt_listen_socket_t */
20 
21     nxt_array_t            *services;           /* of nxt_service_t */
22     nxt_array_t            *languages;          /* of nxt_app_lang_module_t */
23     void                   *data;
24 
25     nxt_runtime_cont_t     start;
26 
27     nxt_str_t              hostname;
28 
29     nxt_file_name_t        *pid_file;
30 
31 #if (NXT_TLS)
32     const nxt_tls_lib_t    *tls;
33 #endif
34 
35     nxt_array_t            *thread_pools;       /* of nxt_thread_pool_t */
36     nxt_runtime_cont_t     continuation;
37 
38     nxt_process_t          *mprocess;
39     size_t                 nprocesses;
40     nxt_thread_mutex_t     processes_mutex;
41     nxt_lvlhsh_t           processes;           /* of nxt_process_t */
42 
43     nxt_port_t             *port_by_type[NXT_PROCESS_MAX];
44     nxt_lvlhsh_t           ports;               /* of nxt_port_t */
45 
46     nxt_list_t             *log_files;          /* of nxt_file_t */
47 
48     uint32_t               last_engine_id;
49 
50     nxt_process_type_t     type;
51 
52     nxt_timer_t            timer;
53 
54     uint8_t                daemon;
55     uint8_t                batch;
56     uint8_t                status;
57     uint8_t                is_pid_isolated;
58 
59     const char             *engine;
60     uint32_t               engine_connections;
61     uint32_t               auxiliary_threads;
62     nxt_credential_t       user_cred;
63     nxt_capabilities_t     capabilities;
64     const char             *group;
65     const char             *pid;
66     const char             *log;
67     const char             *modules;
68     const char             *state;
69     const char             *ver;
70     const char             *ver_tmp;
71     const char             *conf;
72     const char             *conf_tmp;
73     const char             *control;
74     const char             *tmp;
75 
76     nxt_str_t              certs;
77 
78     nxt_queue_t            engines;            /* of nxt_event_engine_t */
79 
80     nxt_sockaddr_t         *controller_listen;
81     nxt_listen_socket_t    *controller_socket;
82 };
83 
84 
85 
86 typedef nxt_int_t (*nxt_module_init_t)(nxt_thread_t *thr, nxt_runtime_t *rt);
87 
88 
89 nxt_int_t nxt_runtime_create(nxt_task_t *task);
90 void nxt_runtime_quit(nxt_task_t *task, nxt_uint_t status);
91 
92 void nxt_runtime_event_engine_free(nxt_runtime_t *rt);
93 
94 nxt_int_t nxt_runtime_thread_pool_create(nxt_thread_t *thr, nxt_runtime_t *rt,
95     nxt_uint_t max_threads, nxt_nsec_t timeout);
96 
97 
98 void nxt_runtime_process_add(nxt_task_t *task, nxt_process_t *process);
99 void nxt_runtime_process_remove(nxt_runtime_t *rt, nxt_process_t *process);
100 
101 nxt_process_t *nxt_runtime_process_find(nxt_runtime_t *rt, nxt_pid_t pid);
102 
103 nxt_process_t *nxt_runtime_process_first(nxt_runtime_t *rt,
104     nxt_lvlhsh_each_t *lhe);
105 
106 void nxt_runtime_process_release(nxt_runtime_t *rt, nxt_process_t *process);
107 
108 #define nxt_runtime_process_next(rt, lhe)                                     \
109     nxt_lvlhsh_each(&rt->processes, lhe)
110 
111 nxt_port_t *nxt_runtime_process_port_create(nxt_task_t *task, nxt_runtime_t *rt,
112     nxt_pid_t pid, nxt_port_id_t id, nxt_process_type_t type);
113 
114 void nxt_runtime_port_remove(nxt_task_t *task, nxt_port_t *port);
115 void nxt_runtime_stop_app_processes(nxt_task_t *task, nxt_runtime_t *rt);
116 
117 NXT_EXPORT nxt_port_t *nxt_runtime_port_find(nxt_runtime_t *rt, nxt_pid_t pid,
118     nxt_port_id_t port_id);
119 
120 
121 /* STUB */
122 nxt_int_t nxt_runtime_controller_socket(nxt_task_t *task, nxt_runtime_t *rt);
123 
124 nxt_str_t *nxt_current_directory(nxt_mp_t *mp);
125 
126 nxt_listen_socket_t *nxt_runtime_listen_socket_add(nxt_runtime_t *rt,
127     nxt_sockaddr_t *sa);
128 nxt_int_t nxt_runtime_listen_sockets_create(nxt_task_t *task,
129     nxt_runtime_t *rt);
130 nxt_int_t nxt_runtime_listen_sockets_enable(nxt_task_t *task,
131     nxt_runtime_t *rt);
132 nxt_file_t *nxt_runtime_log_file_add(nxt_runtime_t *rt, nxt_str_t *name);
133 
134 /* STUB */
135 void nxt_cdecl nxt_log_time_handler(nxt_uint_t level, nxt_log_t *log,
136     const char *fmt, ...);
137 
138 void nxt_stream_connection_init(nxt_task_t *task, void *obj, void *data);
139 
140 nxt_int_t nxt_http_register_variables(void);
141 
142 
143 #define nxt_runtime_process_each(rt, process)                                 \
144     do {                                                                      \
145         nxt_lvlhsh_each_t  _lhe;                                              \
146         nxt_process_t      *_nxt;                                             \
147                                                                               \
148         for (process = nxt_runtime_process_first(rt, &_lhe);                  \
149              process != NULL;                                                 \
150              process = _nxt) {                                                \
151                                                                               \
152             _nxt = nxt_runtime_process_next(rt, &_lhe);                       \
153 
154 #define nxt_runtime_process_loop                                              \
155         }                                                                     \
156     } while(0)
157 
158 
159 extern nxt_module_init_t  nxt_init_modules[];
160 extern nxt_uint_t         nxt_init_modules_n;
161 
162 
163 #endif /* _NXT_RUNTIME_H_INCLIDED_ */
164