Mercurial > hg > nginx
diff src/core/nginx.c @ 107:b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 01 Jul 2003 15:00:03 +0000 |
parents | 9f9de4deda7e |
children | adc093f880c8 |
line wrap: on
line diff
--- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -23,6 +23,346 @@ int ngx_connection_counter; ngx_array_t ngx_listening_sockets; +#if 0 + +int main(int argc, char *const *argv) +{ + int i; + ngx_str_t conf_file; + ngx_log_t *log; + ngx_pool_t *pool; + ngx_conf_t conf; + + ngx_max_sockets = -1; + + log = ngx_log_init_errlog(); + + if (ngx_os_init(log) == NGX_ERROR) { + return 1; + } + + ngx_max_module = 0; + for (i = 0; ngx_modules[i]; i++) { + ngx_modules[i]->index = ngx_max_module++; + } + + ngx_test_null(pool, ngx_create_pool(16 * 1024, log), 1); + ngx_test_null(cycle, ngx_pcalloc(pool, sizeof(ngx_cycle_t)), 1); + cycle->pool = pool; + + if (ngx_init_conf(cycle) == NGX_ERROR) { + return 1; + } + + /* daemon */ + + /* life cycle */ + + for ( ;; ) { + + /* forks */ + + ngx_init_temp_number(); + + /* threads */ + + for ( ;; ) { + + worker(cycle->log); + + pool = ngx_create_pool(16 * 1024, cycle->log); + + if (pool == NULL) { + continue; + } + + new_cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t)); + + if (new_cycle == NULL) { + ngx_destroy_pool(pool); + continue; + } + + new_cycle->pool = pool; + + if (ngx_init_conf(new_cycle, cycle->log) == NGX_ERROR) { + ngx_destroy_pool(new_cycle->pool); + continue; + } + + nls = new_cycle->listening.elts; + for (n = 0; n < new_cycle->listening.nelts; n++) { + ls = cycle->listening.elts; + for (i = 0; i < cycle->listening.nelts; i++) { + if (ngx_memcmp(nls[n].sockaddr, + ls[i].sockaddr, ls[i].socklen) == 0) + { + nls[n].fd = ls[i].fd; + break; + } + } + + if (nls[n].fd == -1) { + nls[n].new = 1; + } + } + + if (ngx_open_listening_sockets(new_cycle) == NGX_ERROR) { + for (n = 0; n < new_cycle->listening.nelts; n++) { + if (nls[n].new && nls[n].fd != -1) { + if (ngx_close_socket(nls[n].fd) == -1) + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + ngx_close_socket_n " %s failed", + nls[n].addr_text.data); + } + } + } + + ngx_destroy_pool(new_cycle->pool); + continue; + } + + new_cycle->log = new log; + + ngx_destroy_pool(cycle->pool); + + cycle = new_cycle; + break; + } + } + + return 0; +} + + +static int ngx_init_cycle(ngx_cycle_t *old_cycle, ngx_log_t *log) +{ + int n; + ngx_conf_t conf; + ngx_pool_t *pool; + ngx_cycle_t *cycle; + + + pool = ngx_create_pool(16 * 1024, log); + if (pool == NULL) { + return NULL; + } + + cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t)); + if (cycle == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + cycle->pool = pool; + + n = old_cycle ? old_cycle->open_files.nelts : 20; + cycle->open_files.elts = ngx_pcalloc(pool, n * sizeof(ngx_open_file_t)); + if (cycle->open_files.elts == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + cycle->open_files.nelts = 0; + cycle->open_files.size = sizeof(ngx_open_file_t); + cycle->open_files.nalloc = n; + cycle->open_files.pool = pool; + + n = old_cycle ? old_cycle->listening.nelts : 10; + cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t)); + if (cycle->listening.elts == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + cycle->listening.nelts = 0; + cycle->listening.size = sizeof(ngx_listening_t); + cycle->listening.nalloc = n; + cycle->listening.pool = pool; + + cycle->conf_ctx = ngx_pcalloc(pool, ngx_max_module * sizeof(void *)); + if (cycle->conf_ctx == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + + ngx_memzero(&conf, sizeof(ngx_conf_t)); + /* STUB: init array ? */ + conf.args = ngx_create_array(pool, 10, sizeof(ngx_str_t)); + if (conf.args == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + + conf.ctx = cycle->conf_ctx; + conf.cycle = cycle; + /* STUB */ conf.pool = cycle->pool; + conf.log = log; + conf.module_type = NGX_CORE_MODULE; + conf.cmd_type = NGX_MAIN_CONF; + + conf_file.len = sizeof(NGINX_CONF) - 1; + conf_file.data = NGINX_CONF; + + if (ngx_conf_parse(&conf, &conf_file) != NGX_CONF_OK) { + ngx_destroy_pool(pool); + return NULL; + } + + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->init_module) { + if (ngx_modules[i]->init_module(cycle, log) == NGX_ERROR) + { + failed = 1; + break; + } + } + } + + if (!failed) { + file = cycle->open_files.elts; + for (i = 0; i < cycle->open_files.nelts; i++) { + if (file->name.data = NULL) { + continue; + } + + file->fd = ngx_open_file(file->name.data, + NGX_FILE_RDWR, + NGX_FILE_CREATE_OR_OPEN|NGX_FILE_APPEND); + + if (file->fd == NGX_INVALID_FILE) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, + ngx_open_file_n " \"%s\" failed", + file->name.data); + failed = 1; + break; + } + + /* TODO: Win32 append */ + } + } + + if (!failed) { + if (ngx_open_listening_sockets(new_cycle) == NGX_ERROR) { + failed = 1; + } + } + + if (failed) { + + /* rollback the new cycle configuration */ + + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->rollback_module) { + ngx_modules[i]->rollback_module(cycle); + } + } + + file = cycle->open_files.elts; + for (i = 0; i < cycle->open_files.nelts; i++) { + if (file->fd != NGX_INVALID_FILE) { + if (ngx_close_file(file.fd) == NGX_FILE_ERROR) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, + ngx_close_file_n " \"%s\" failed", + file->name.data); + } + } + } + + ls[i] = cycle->listening.elts; + for (i = 0; i < cycle->listening.nelts; i++) { + if (ls[i].new && ls[i].fd != -1) { + if (ngx_close_socket(ls[i].fd) == -1) + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + ngx_close_socket_n " %s failed", + ls[i].addr_text.data); + } + } + } + + ngx_destroy_pool(pool); + return NULL; + + } else { + + /* commit the new cycle configuration */ + + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->commit_module) { + ngx_modules[i]->commit_module(cycle); + } + } + } + + new_cycle->log = ???; + pool->log = ???; + + return cycle; + + + + + + +---------------- + + ngx_init_array(cycle->listening, cycle->pool, 10, sizeof(ngx_listening_t), + NGX_ERROR); + + ngx_memzero(&conf, sizeof(ngx_conf_t)); + + ngx_test_null(conf.args, + ngx_create_array(cycle->pool, 10, sizeof(ngx_str_t)), + NGX_ERROR); + + ngx_test_null(cycle->conf_ctx, + ngx_pcalloc(cycle->pool, ngx_max_module * sizeof(void *)), + NGX_ERROR); + + conf.ctx = cycle->conf_ctx; + conf.cycle = cycle; + /* STUB */ conf.pool = cycle->pool; conf.log = cycle->log; + conf.module_type = NGX_CORE_MODULE; + conf.cmd_type = NGX_MAIN_CONF; + + conf_file.len = sizeof(NGINX_CONF) - 1; + conf_file.data = NGINX_CONF; + + if (ngx_conf_parse(&conf, &conf_file) == NGX_CONF_OK) { + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->init_module) { + if (ngx_modules[i]->init_module(pool) == NGX_ERROR) { + failed = 1; + break; + } + } + } + + } else { + failed = 1; + } + + if (failed) { + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->rollback_module) { + ngx_modules[i]->rollback_module(pool); + } + } + + return NGX_ERROR; + + } else { + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->commit_module) { + ngx_modules[i]->commit_module(pool); + } + } + } + + return NGX_OK; +} + + +#endif + + int main(int argc, char *const *argv) { int i; @@ -44,61 +384,6 @@ int main(int argc, char *const *argv) ngx_modules[i]->index = ngx_max_module++; } -#if 0 - - ngx_test_null(cycle->pool, ngx_create_pool(16 * 1024, log), 1); - - if (ngx_init_conf(cycle) == NGX_ERROR) { - ngx_destroy_pool(cycle->pool); - return 1; - } - - /* daemon */ - - /* life cycle */ - - { - - /* forks */ - - /* threads */ - - for ( ;; ) { - worker; - - new_cycle = ngx_calloc(sizeof(ngx_cycle_t), cycle->log); - - if (new_cycle == NULL) { - continue; - } - - new_cycle->pool = ngx_create_pool(16 * 1024, cycle->log); - - if (new_cycle->pool == NULL) { - ngx_free(new_cycle); - continue; - } - - if (ngx_init_conf(new_cycle) == NGX_ERROR) { - ngx_destroy_pool(new_cycle->pool); - ngx_free(new_cycle); - continue; - } - - /* update bound listening */ - - ngx_destroy_pool(cycle->pool); - ngx_free(cycle); - - cycle = new_cycle; - break; - } - } - - return 0; - -#endif - /* life cycle */ { @@ -169,43 +454,6 @@ int main(int argc, char *const *argv) return 0; } -#if 0 - -static int ngx_init_conf(ngx_cycle_t *cycle) -{ - ngx_conf_t conf; - - ngx_init_array(cycle->listening, cycle->pool, 10, sizeof(ngx_listening_t), - NGX_ERROR); - - ngx_memzero(&conf, sizeof(ngx_conf_t)); - - ngx_test_null(conf.args, - ngx_create_array(cycle->pool, 10, sizeof(ngx_str_t)), - NGX_ERROR); - - ngx_test_null(ngx_conf_ctx, - ngx_pcalloc(cycle->pool, ngx_max_module * sizeof(void *)), - NGX_ERROR); - - conf.ctx = ngx_conf_ctx; - conf.pool = cycle->pool; - conf.log = cycle->log; - conf.module_type = NGX_CORE_MODULE; - conf.cmd_type = NGX_MAIN_CONF; - - conf_file.len = sizeof(NGINX_CONF) - 1; - conf_file.data = NGINX_CONF; - - if (ngx_conf_parse(&conf, &conf_file) != NGX_CONF_OK) { - return NGX_ERROR; - } - - return NGX_OK; -} - - -#endif static int ngx_open_listening_sockets(ngx_log_t *log) {