diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-07-01 19:00:03 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-07-01 19:00:03 +0400 |
commit | 6abfde65573d145325a908417d5301d4766c6af8 (patch) | |
tree | a1ac279536b8830a41dcbde437af0ac054f3050b /src | |
parent | f5e97c5cbe063246087f11f36fa04c48e8dba10a (diff) |
nginx-0.0.1-2003-07-01-19:00:03 import
Diffstat (limited to 'src')
-rw-r--r-- | src/core/nginx.c | 352 | ||||
-rw-r--r-- | src/core/ngx_conf_file.h | 5 | ||||
-rw-r--r-- | src/core/ngx_modules.c | 4 | ||||
-rw-r--r-- | src/core/ngx_string.h | 14 | ||||
-rw-r--r-- | src/event/modules/ngx_poll_module.c | 2 | ||||
-rw-r--r-- | src/event/modules/ngx_select_module.c | 4 | ||||
-rw-r--r-- | src/event/ngx_event.c | 16 | ||||
-rw-r--r-- | src/event/ngx_event.h | 2 | ||||
-rw-r--r-- | src/event/ngx_event_accept.c | 2 | ||||
-rw-r--r-- | src/event/ngx_event_timer.c | 2 | ||||
-rw-r--r-- | src/http/ngx_http_cache.c | 3 | ||||
-rw-r--r-- | src/os/win32/ngx_errno.c | 2 | ||||
-rw-r--r-- | src/os/win32/ngx_win32_init.c | 22 |
13 files changed, 351 insertions, 79 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c index 338f98a75..b96739321 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -23,12 +23,14 @@ 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, *old_pool; + ngx_pool_t *pool; ngx_conf_t conf; ngx_max_sockets = -1; @@ -44,12 +46,11 @@ 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); + 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) { - ngx_destroy_pool(cycle->pool); return 1; } @@ -57,38 +58,73 @@ int main(int argc, char *const *argv) /* life cycle */ - { + for ( ;; ) { /* forks */ + ngx_init_temp_number(); + /* threads */ for ( ;; ) { - worker; - new_cycle = ngx_calloc(sizeof(ngx_cycle_t), cycle->log); + 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 = ngx_create_pool(16 * 1024, cycle->log); + new_cycle->pool = pool; - if (new_cycle->pool == NULL) { - ngx_free(new_cycle); + if (ngx_init_conf(new_cycle, cycle->log) == NGX_ERROR) { + ngx_destroy_pool(new_cycle->pool); continue; } - if (ngx_init_conf(new_cycle) == NGX_ERROR) { + 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); - ngx_free(new_cycle); continue; } - /* update bound listening */ + new_cycle->log = new log; ngx_destroy_pool(cycle->pool); - ngx_free(cycle); cycle = new_cycle; break; @@ -96,9 +132,258 @@ int main(int argc, char *const *argv) } 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; + ngx_str_t conf_file; + ngx_log_t *log; + ngx_pool_t *pool, *old_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++; + } + /* 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) { diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h index d82d239e0..e84137472 100644 --- a/src/core/ngx_conf_file.h +++ b/src/core/ngx_conf_file.h @@ -83,7 +83,9 @@ typedef struct { ngx_pool_t *pool; ngx_log_t *log; ngx_array_t listening; - ngx_array_t files; + ngx_array_t open_files; + + unsigned one_process:1; } ngx_cycle_t; @@ -95,6 +97,7 @@ struct ngx_conf_s { char *name; ngx_array_t *args; + ngx_cycle_t *cycle; ngx_pool_t *pool; ngx_conf_file_t *conf_file; ngx_log_t *log; diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c index 0dbcde64d..50655abf4 100644 --- a/src/core/ngx_modules.c +++ b/src/core/ngx_modules.c @@ -6,7 +6,7 @@ extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_events_module; -extern ngx_module_t ngx_event_module; +extern ngx_module_t ngx_event_core_module; extern ngx_module_t ngx_select_module; #if (HAVE_POLL) extern ngx_module_t ngx_poll_module; @@ -51,7 +51,7 @@ ngx_module_t *ngx_modules[] = { /* events */ &ngx_events_module, - &ngx_event_module, + &ngx_event_core_module, &ngx_select_module, #if (HAVE_POLL) diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h index 036194bde..73ed43a95 100644 --- a/src/core/ngx_string.h +++ b/src/core/ngx_string.h @@ -18,8 +18,6 @@ typedef struct { #if (WIN32) -#define ngx_memzero ZeroMemory - #define ngx_strncasecmp strnicmp #define ngx_strcasecmp stricmp #define ngx_strncmp strncmp @@ -32,8 +30,6 @@ typedef struct { #else -#define ngx_memzero bzero - #define ngx_strncasecmp strncasecmp #define ngx_strcasecmp strcasecmp #define ngx_strncmp strncmp @@ -46,9 +42,19 @@ typedef struct { #endif +/* + * msvc and icc compile memset() to inline "rep stos" + * while ZeroMemory and bzero are calls. + */ +#define ngx_memzero(buf, n) memset(buf, n, 0) + +/* msvc and icc compile memcpy() to inline "rep movs" */ #define ngx_memcpy(dst, src, n) memcpy(dst, src, n) #define ngx_cpymem(dst, src, n) ((char *) memcpy(dst, src, n)) + n +/* msvc and icc compile memcmp() to inline loop */ +#define ngx_memcmp memcmp + char *ngx_cpystrn(char *dst, char *src, size_t n); int ngx_rstrncmp(char *s1, char *s2, size_t n); int ngx_atoi(char *line, size_t n); diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c index a49afea97..b03ed1745 100644 --- a/src/event/modules/ngx_poll_module.c +++ b/src/event/modules/ngx_poll_module.c @@ -58,7 +58,7 @@ static int ngx_poll_init(ngx_log_t *log) { ngx_event_conf_t *ecf; - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); ngx_test_null(event_list, ngx_alloc(sizeof(struct pollfd) * ecf->connections, log), diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c index 96a5d678e..a55be3034 100644 --- a/src/event/modules/ngx_select_module.c +++ b/src/event/modules/ngx_select_module.c @@ -70,7 +70,7 @@ static int ngx_select_init(ngx_log_t *log) { ngx_event_conf_t *ecf; - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); FD_ZERO(&master_read_fd_set); FD_ZERO(&master_write_fd_set); @@ -376,7 +376,7 @@ static char *ngx_select_init_conf(ngx_pool_t *pool, void *conf) { ngx_event_conf_t *ecf; - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); /* the default FD_SETSIZE is 1024U in FreeBSD 5.x */ diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index f6d10cc4b..263d88e36 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -65,9 +65,9 @@ ngx_module_t ngx_events_module = { }; -static ngx_str_t event_name = ngx_string("event"); +static ngx_str_t event_core_name = ngx_string("event_core"); -static ngx_command_t ngx_event_commands[] = { +static ngx_command_t ngx_event_core_commands[] = { {ngx_string("connections"), NGX_EVENT_CONF|NGX_CONF_TAKE1, @@ -94,8 +94,8 @@ static ngx_command_t ngx_event_commands[] = { }; -ngx_event_module_t ngx_event_module_ctx = { - &event_name, +ngx_event_module_t ngx_event_core_module_ctx = { + &event_core_name, ngx_event_create_conf, /* create configuration */ ngx_event_init_conf, /* init configuration */ @@ -103,10 +103,10 @@ ngx_event_module_t ngx_event_module_ctx = { }; -ngx_module_t ngx_event_module = { +ngx_module_t ngx_event_core_module = { NGX_MODULE, - &ngx_event_module_ctx, /* module context */ - ngx_event_commands, /* module directives */ + &ngx_event_core_module_ctx, /* module context */ + ngx_event_core_commands, /* module directives */ NGX_EVENT_MODULE, /* module type */ NULL /* init module */ }; @@ -125,7 +125,7 @@ int ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log) ngx_iocp_conf_t *iocpcf; #endif - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); ngx_log_debug(log, "CONN: %d" _ ecf->connections); ngx_log_debug(log, "TYPE: %d" _ ecf->use); diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 9b6dd2399..8ae2b5385 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -345,7 +345,7 @@ typedef struct { extern ngx_module_t ngx_events_module; -extern ngx_module_t ngx_event_module; +extern ngx_module_t ngx_event_core_module; #define ngx_event_get_conf(module) \ diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c index 7e877617f..2d2eed4f4 100644 --- a/src/event/ngx_event_accept.c +++ b/src/event/ngx_event_accept.c @@ -17,7 +17,7 @@ void ngx_event_accept(ngx_event_t *ev) ngx_connection_t *c, *ls; ngx_event_conf_t *ecf; - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); ls = ev->data; diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index a49cc9260..9ca3fe504 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -15,7 +15,7 @@ int ngx_event_timer_init(ngx_log_t *log) ngx_event_t *new_queue; ngx_event_conf_t *ecf; - ecf = ngx_event_get_conf(ngx_event_module); + ecf = ngx_event_get_conf(ngx_event_core_module); if (ngx_timer_queue_num < ecf->timer_queues) { ngx_test_null(new_queue, diff --git a/src/http/ngx_http_cache.c b/src/http/ngx_http_cache.c index b156966dc..e29241b57 100644 --- a/src/http/ngx_http_cache.c +++ b/src/http/ngx_http_cache.c @@ -83,7 +83,8 @@ int ngx_crc(char *data, size_t len) for (sum = 0; len; len--) { /* - * gcc 2.95.2 x86 compiles that operator into the single rol opcode. + * gcc 2.95.2 x86 and icc 7.1.006 compile that operator + * into the single rol opcode. * msvc 6.0sp2 compiles it into four opcodes. */ sum = sum >> 1 | sum << 31; diff --git a/src/os/win32/ngx_errno.c b/src/os/win32/ngx_errno.c index 30c1b9315..3a9487c06 100644 --- a/src/os/win32/ngx_errno.c +++ b/src/os/win32/ngx_errno.c @@ -34,7 +34,7 @@ int ngx_strerror_r(ngx_err_t err, char *errstr, size_t size) ngx_err_t format_error; len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM - | FORMAT_MESSAGE_IGNORE_INSERTS, + |FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), errstr, size, NULL); diff --git a/src/os/win32/ngx_win32_init.c b/src/os/win32/ngx_win32_init.c index 6bc69e4c9..c522c9e95 100644 --- a/src/os/win32/ngx_win32_init.c +++ b/src/os/win32/ngx_win32_init.c @@ -77,20 +77,34 @@ int ngx_os_init(ngx_log_t *log) + osvi.wServicePackMinor; ngx_log_error(NGX_LOG_INFO, log, 0, - "OS: %u build:%u, %s, suite:%x, type:%u", + "OS: %u build:%u, \"%s\", suite:%x, type:%u", ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion, osvi.wReserved[0], osvi.wReserved[1]); #if 0 ngx_log_error(NGX_LOG_INFO, log, 0, - "OS: %u build:%u, %s, suite:%x, type:%u", + "OS: %u build:%u, \"%s\", suite:%x, type:%u", ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion, osvi.wSuiteMask, osvi.wProductType); #endif } else { - ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, %s", - ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion); + if (osvi.dwPlatformId == 1) { + + /* Win9x build */ + + ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u.%u.%u, \"%s\"", + ngx_win32_version, + osvi.dwBuildNumber >> 24, + (osvi.dwBuildNumber >> 16) & 0xff, + osvi.dwBuildNumber & 0xffff, + osvi.szCSDVersion); + + } else { + ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, \"%s\"", + ngx_win32_version, osvi.dwBuildNumber, + osvi.szCSDVersion); + } } |