Mercurial > hg > nginx
diff src/event/ngx_event.c @ 114:ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Jul 2003 06:11:50 +0000 |
parents | d7f606e25b99 |
children | ef8c87afcfc5 |
line wrap: on
line diff
--- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -21,23 +21,16 @@ extern ngx_module_t ngx_devpoll_module; #include <ngx_aio_module.h> #endif -static int ngx_event_init_module(ngx_cycle_t *cycle); -static int ngx_event_init_child(ngx_cycle_t *cycle); static int ngx_event_init(ngx_cycle_t *cycle); - static char *ngx_events_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_event_use(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static void *ngx_event_create_conf(ngx_pool_t *pool); -static char *ngx_event_init_conf(ngx_pool_t *pool, void *conf); +static void *ngx_event_create_conf(ngx_cycle_t *cycle); +static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf); int ngx_event_flags; ngx_event_actions_t ngx_event_actions; -int ngx_max_connections; -ngx_connection_t *ngx_connections; -ngx_event_t *ngx_read_events, *ngx_write_events; - static int ngx_event_max_module; @@ -111,32 +104,11 @@ ngx_module_t ngx_event_core_module = { &ngx_event_core_module_ctx, /* module context */ ngx_event_core_commands, /* module directives */ NGX_EVENT_MODULE, /* module type */ - ngx_event_init_module, /* init module */ - ngx_event_init_child /* init child */ + NULL, /* init module */ + ngx_event_init /* init child */ }; - -static int ngx_event_init_module(ngx_cycle_t *cycle) -{ - if (cycle->one_process) { - return ngx_event_init(cycle); - } - - return NGX_OK; -} - - -static int ngx_event_init_child(ngx_cycle_t *cycle) -{ - if (cycle->one_process) { - return NGX_OK; - } - - return ngx_event_init(cycle); -} - - static int ngx_event_init(ngx_cycle_t *cycle) { int m, i, fd; @@ -154,6 +126,8 @@ static int ngx_event_init(ngx_cycle_t *c ngx_log_debug(cycle->log, "CONN: %d" _ ecf->connections); ngx_log_debug(cycle->log, "TYPE: %d" _ ecf->use); + cycle->connection_n = ecf->connections; + for (m = 0; ngx_modules[m]; m++) { if (ngx_modules[m]->type != NGX_EVENT_MODULE) { continue; @@ -168,30 +142,34 @@ ngx_log_debug(cycle->log, "TYPE: %d" _ e } } - if (ngx_max_connections && ngx_max_connections < ecf->connections) { + if (cycle->old_cycle && cycle->old_cycle->connection_n < ecf->connections) { /* TODO: push into delayed array and temporary pool */ - ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "NOT READY"); + ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "NOT READY: connections"); exit(1); } - ngx_max_connections = ecf->connections; - - ngx_test_null(ngx_connections, + ngx_test_null(cycle->connections, ngx_alloc(sizeof(ngx_connection_t) * ecf->connections, cycle->log), NGX_ERROR); - ngx_test_null(ngx_read_events, + c = cycle->connections; + for (i = 0; i < cycle->connection_n; i++) { + c[i].fd = -1; + } + + ngx_test_null(cycle->read_events, ngx_alloc(sizeof(ngx_event_t) * ecf->connections, cycle->log), NGX_ERROR); - ngx_test_null(ngx_write_events, + ngx_test_null(cycle->write_events, ngx_alloc(sizeof(ngx_event_t) * ecf->connections, cycle->log), NGX_ERROR); /* for each listening socket */ - for (s = cycle->listening.elts, i = 0; i < cycle->listening.nelts; i++) { + s = cycle->listening.elts; + for (i = 0; i < cycle->listening.nelts; i++) { fd = s[i].fd; @@ -201,33 +179,38 @@ ngx_log_debug(cycle->log, "TYPE: %d" _ e * so to find a connection we divide a socket number by 4. */ - c = &ngx_connections[fd / 4]; - rev = &ngx_read_events[fd / 4]; - wev = &ngx_write_events[fd / 4]; -#else - c = &ngx_connections[fd]; - rev = &ngx_read_events[fd]; - wev = &ngx_write_events[fd]; + fd /= 4; #endif + c = &cycle->connections[fd]; + rev = &cycle->read_events[fd]; + wev = &cycle->write_events[fd]; + ngx_memzero(c, sizeof(ngx_connection_t)); ngx_memzero(rev, sizeof(ngx_event_t)); - c->fd = fd; + c->fd = s[i].fd; c->listening = &s[i]; c->ctx = s[i].ctx; c->servers = s[i].servers; c->log = s[i].log; + c->read = rev; + /* required by iocp in "c->write->active = 1" */ + c->write = wev; + +#if 0 ngx_test_null(rev->log, ngx_palloc(cycle->pool, sizeof(ngx_log_t)), NGX_ERROR); ngx_memcpy(rev->log, c->log, sizeof(ngx_log_t)); - c->read = rev; - c->write = wev; +#endif + + rev->log = c->log; rev->data = c; rev->index = NGX_INVALID_INDEX; + #if 0 rev->listening = 1; #endif @@ -238,6 +221,21 @@ ngx_log_debug(cycle->log, "TYPE: %d" _ e rev->deferred_accept = s[i].deferred_accept; #endif + /* required by poll */ + wev->index = NGX_INVALID_INDEX; + + if ((ngx_event_flags & NGX_HAVE_IOCP_EVENT) == 0) { + if (s[i].remain) { + + if (ngx_del_event(&cycle->old_cycle->read_events[fd], + NGX_READ_EVENT, 0) == NGX_ERROR) { + return NGX_ERROR; + } + + cycle->old_cycle->connections[fd].fd = -1; + } + } + #if (WIN32) if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) { @@ -247,7 +245,7 @@ ngx_log_debug(cycle->log, "TYPE: %d" _ e return NGX_ERROR; } - iocpcf = ngx_event_get_conf(ngx_iocp_module); + iocpcf = ngx_event_get_conf(cycle->conf_ctx, ngx_iocp_module); if (ngx_event_post_acceptex(&s[i], iocpcf->acceptex) == NGX_ERROR) { return NGX_ERROR; } @@ -305,7 +303,7 @@ static char *ngx_events_block(ngx_conf_t if (module->create_conf) { ngx_test_null((*ctx)[ngx_modules[m]->ctx_index], - module->create_conf(cf->pool), + module->create_conf(cf->cycle), NGX_CONF_ERROR); } } @@ -328,7 +326,8 @@ static char *ngx_events_block(ngx_conf_t module = ngx_modules[m]->ctx; if (module->init_conf) { - rv = module->init_conf(cf->pool, (*ctx)[ngx_modules[m]->ctx_index]); + rv = module->init_conf(cf->cycle, + (*ctx)[ngx_modules[m]->ctx_index]); if (rv != NGX_CONF_OK) { return rv; } @@ -371,11 +370,11 @@ static char *ngx_event_use(ngx_conf_t *c } -static void *ngx_event_create_conf(ngx_pool_t *pool) +static void *ngx_event_create_conf(ngx_cycle_t *cycle) { ngx_event_conf_t *ecf; - ngx_test_null(ecf, ngx_palloc(pool, sizeof(ngx_event_conf_t)), + ngx_test_null(ecf, ngx_palloc(cycle->pool, sizeof(ngx_event_conf_t)), NGX_CONF_ERROR); ecf->connections = NGX_CONF_UNSET; @@ -386,7 +385,7 @@ static void *ngx_event_create_conf(ngx_p } -static char *ngx_event_init_conf(ngx_pool_t *pool, void *conf) +static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf) { ngx_event_conf_t *ecf = conf;