/* * Copyright (C) Igor Sysoev * Copyright (C) Valentin V. Bartenev * Copyright (C) NGINX, Inc. */ #ifndef _NXT_CYCLE_H_INCLUDED_ #define _NXT_CYCLE_H_INCLUDED_ typedef enum { NXT_PROCESS_SINGLE = 0, NXT_PROCESS_MASTER, NXT_PROCESS_WORKER, } nxt_process_type_e; typedef struct nxt_cycle_s nxt_cycle_t; typedef void (*nxt_cycle_cont_t)(nxt_task_t *task, nxt_cycle_t *cycle); struct nxt_cycle_s { nxt_mem_pool_t *mem_pool; nxt_cycle_t *previous; nxt_array_t *inherited_sockets; /* of nxt_listen_socket_t */ nxt_array_t *listen_sockets; /* of nxt_listen_socket_t */ nxt_array_t *services; /* of nxt_service_t */ nxt_array_t *engines; /* of nxt_event_engine_t */ nxt_cycle_cont_t start; nxt_str_t *conf_prefix; nxt_str_t *prefix; nxt_str_t hostname; nxt_file_name_t *pid_file; nxt_file_name_t *oldbin_file; nxt_pid_t new_binary; #if (NXT_THREADS) nxt_array_t *thread_pools; /* of nxt_thread_pool_t */ nxt_cycle_cont_t continuation; #endif nxt_array_t *processes; /* of nxt_process_port_t */ nxt_list_t *log_files; /* of nxt_file_t */ nxt_array_t *shm_zones; /* of nxt_cycle_shm_zone_t */ uint32_t process_generation; uint32_t current_process; uint32_t last_engine_id; nxt_process_type_e type; uint8_t test_config; /* 1 bit */ uint8_t reconfiguring; /* 1 bit */ void **core_ctx; nxt_timer_t timer; uint8_t daemon; uint8_t batch; uint8_t master_process; const char *engine; uint32_t engine_connections; uint32_t worker_processes; uint32_t auxiliary_threads; nxt_user_cred_t user_cred; const char *group; const char *pid; const char *error_log; nxt_sockaddr_t *app_listen; nxt_sockaddr_t *stream_listen; nxt_str_t upstream; }; typedef struct { void *addr; size_t size; nxt_uint_t page_size; nxt_str_t name; } nxt_cycle_shm_zone_t; typedef nxt_int_t (*nxt_module_init_t)(nxt_thread_t *thr, nxt_cycle_t *cycle); nxt_thread_extern_data(nxt_cycle_t *, nxt_thread_cycle_data); nxt_inline void nxt_thread_cycle_set(nxt_cycle_t *cycle) { nxt_cycle_t **p; p = nxt_thread_get_data(nxt_thread_cycle_data); *p = cycle; } nxt_inline nxt_cycle_t * nxt_thread_cycle(void) { nxt_cycle_t **p; p = nxt_thread_get_data(nxt_thread_cycle_data); return *p; } nxt_int_t nxt_cycle_create(nxt_thread_t *thr, nxt_task_t *task, nxt_cycle_t *previous, nxt_cycle_cont_t start); void nxt_cycle_quit(nxt_task_t *task, nxt_cycle_t *cycle); void nxt_cycle_event_engine_free(nxt_cycle_t *cycle); #if (NXT_THREADS) nxt_int_t nxt_cycle_thread_pool_create(nxt_thread_t *thr, nxt_cycle_t *cycle, nxt_uint_t max_threads, nxt_nsec_t timeout); #endif /* STUB */ nxt_str_t *nxt_current_directory(nxt_mem_pool_t *mp); nxt_int_t nxt_cycle_pid_file_create(nxt_file_name_t *pid_file, nxt_bool_t test); nxt_listen_socket_t *nxt_cycle_listen_socket_add(nxt_cycle_t *cycle, nxt_sockaddr_t *sa); nxt_int_t nxt_cycle_listen_sockets_enable(nxt_task_t *task, nxt_cycle_t *cycle); nxt_file_t *nxt_cycle_log_file_add(nxt_cycle_t *cycle, nxt_str_t *name); nxt_int_t nxt_cycle_shm_zone_add(nxt_cycle_t *cycle, nxt_str_t *name, size_t size, nxt_uint_t page_size); /* STUB */ void nxt_cdecl nxt_log_time_handler(nxt_uint_t level, nxt_log_t *log, const char *fmt, ...); void nxt_stream_connection_init(nxt_task_t *task, void *obj, void *data); nxt_int_t nxt_app_start(nxt_cycle_t *cycle); extern nxt_module_init_t nxt_init_modules[]; extern nxt_uint_t nxt_init_modules_n; #endif /* _NXT_CYCLE_H_INCLIDED_ */