nginx-0.0.3-2004-06-01-10:04:46 import
diff --git a/src/core/ngx_buf.h b/src/core/ngx_buf.h
index f2489f1..eb75c3b 100644
--- a/src/core/ngx_buf.h
+++ b/src/core/ngx_buf.h
@@ -142,29 +142,6 @@
(ngx_buf_in_memory(b) ? (size_t) (b->last - b->pos): \
(size_t) (b->file_last - b->file_pos))
-#if 0
-
-#define ngx_hunk_in_memory_only(h) \
- ((h->type & (NGX_HUNK_IN_MEMORY|NGX_HUNK_FILE)) == NGX_HUNK_IN_MEMORY)
-/*
- ((h->type & (NGX_HUNK_TEMP|NGX_HUNK_MEMORY|NGX_HUNK_MMAP|NGX_HUNK_FILE)) \
- == (h->type & (NGX_HUNK_TEMP|NGX_HUNK_MEMORY|NGX_HUNK_MMAP)))
-
-*/
-
-
-
-#define ngx_hunk_special(b) \
- (b->type == (b->type & (NGX_HUNK_FLUSH|NGX_HUNK_LAST)))
-
-
-#define ngx_hunk_size(b) \
- ((b->type & NGX_HUNK_IN_MEMORY) ? (size_t) (b->last - b->pos): \
- (size_t) (b->file_last - b->file_pos))
-
-#endif
-
-
ngx_buf_t *ngx_create_temp_buf(ngx_pool_t *pool, size_t size);
ngx_chain_t *ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs);
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index af85e7d..ecd3c8b 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -60,6 +60,13 @@
} ngx_connection_log_error_e;
+typedef enum {
+ NGX_TCP_NOPUSH_DISABLED = -1,
+ NGX_TCP_NOPUSH_UNSET = 0,
+ NGX_TCP_NOPUSH_SET
+} ngx_connection_tcp_nopush_e;
+
+
struct ngx_connection_s {
void *data;
ngx_event_t *read;
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 0afa697..5ea4fd9 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -38,7 +38,7 @@
}
}
- /* add the incoming hunk to the chain ctx->in */
+ /* add the incoming buf to the chain ctx->in */
if (in) {
if (ngx_chain_add_copy(ctx->pool, &ctx->in, in) == NGX_ERROR) {
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index af5d772..1206245 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -16,10 +16,6 @@
#define si_fd __spare__[0]
int sigtimedwait(const sigset_t *set, siginfo_t *info,
- const struct timespec *timeout);
-
-
-int sigtimedwait(const sigset_t *set, siginfo_t *info,
const struct timespec *timeout)
{
return -1;
@@ -105,6 +101,7 @@
sigemptyset(&set);
sigaddset(&set, rtscf->signo);
+ sigaddset(&set, rtscf->signo + 1);
sigaddset(&set, SIGIO);
if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
@@ -133,12 +130,15 @@
static int ngx_rtsig_add_connection(ngx_connection_t *c)
{
+ int signo;
ngx_rtsig_conf_t *rtscf;
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
+ signo = rtscf->signo + c->read->instance;
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
- "rtsig add connection: fd:%d signo:%d", c->fd, rtscf->signo);
+ "rtsig add connection: fd:%d signo:%d", c->fd, signo);
if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK|O_ASYNC) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
@@ -146,13 +146,13 @@
return NGX_ERROR;
}
- if (fcntl(c->fd, F_SETSIG, rtscf->signo) == -1) {
+ if (fcntl(c->fd, F_SETSIG, signo) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
"fcntl(F_SETSIG) failed");
return NGX_ERROR;
}
- if (fcntl(c->fd, F_SETOWN, ngx_getpid()) == -1) {
+ if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
"fcntl(F_SETOWN) failed");
return NGX_ERROR;
@@ -175,6 +175,9 @@
static int ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags)
{
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
+ "rtsig del connection: fd:%d", c->fd);
+
if (!(flags & NGX_CLOSE_EVENT)) {
if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
@@ -273,9 +276,9 @@
ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
if (err) {
+ ngx_accept_mutex_unlock();
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
cycle->log, err, "sigtimedwait() failed");
- ngx_accept_mutex_unlock();
return NGX_ERROR;
}
@@ -287,17 +290,40 @@
}
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "signo:%d fd:%d band:%X", signo, si.si_fd, si.si_band);
+ "rtsig signo:%d fd:%d band:%X", signo, si.si_fd, si.si_band);
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
- if (signo == rtscf->signo) {
+ if (signo == rtscf->signo || signo == rtscf->signo + 1) {
/* TODO: old_cycles */
c = &ngx_cycle->connections[si.si_fd];
- /* TODO: stale signals */
+ instance = signo - rtscf->signo;
+
+ if (si.si_band & POLLIN) {
+ c->read->returned_instance = instance;
+ }
+
+ if (si.si_band & POLLOUT) {
+ c->write->returned_instance = instance;
+ }
+
+ if (c->read->instance != instance) {
+
+ /*
+ * the stale event from a file descriptor
+ * that was just closed in this iteration
+ */
+
+ ngx_accept_mutex_unlock();
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "rtsig: stale event " PTR_FMT, c);
+
+ return NGX_OK;
+ }
if (si.si_band & (POLLIN|POLLHUP|POLLERR)) {
if (c->read->active) {
@@ -307,7 +333,7 @@
c->read->event_handler(c->read);
} else if (c->read->accept) {
- if (ngx_accept_disabled > 0) {
+ if (ngx_accept_disabled <= 0) {
c->read->event_handler(c->read);
}
@@ -371,9 +397,11 @@
} else {
+ ngx_accept_mutex_unlock();
+
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"sigtimedwait() returned unexpected signal: %d", signo);
- ngx_accept_mutex_unlock();
+
return NGX_ERROR;
}
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 87747c3..c2c7c89 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -372,9 +372,16 @@
rev->event_handler = &ngx_event_accept;
if (ngx_event_flags & NGX_USE_SIGIO_EVENT) {
- if (ngx_add_conn(c) == NGX_ERROR) {
- return NGX_ERROR;
+
+ if (ngx_accept_mutex) {
+ ngx_accept_mutex_held = 0;
+
+ } else {
+ if (ngx_add_conn(c) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
}
+
} else {
if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) {
return NGX_ERROR;
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 0fa0f70..db56f10 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -264,6 +264,16 @@
}
}
+ if (ngx_add_conn) {
+ if (rc == -1) {
+ /* NGX_EINPROGRESS */
+ return NGX_AGAIN;
+ }
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, pc->log, 0, "connected");
+ return NGX_OK;
+ }
+
if (ngx_event_flags & NGX_USE_AIO_EVENT) {
/* aio, iocp */
@@ -294,8 +304,6 @@
return NGX_OK;
}
- /* TODO: epoll */
-
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { /* kqueue */
event = NGX_CLEAR_EVENT;
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 3480986..dac38be 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -225,7 +225,7 @@
/* if there're no bufs to read in then disable a level event */
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0,
- "no pipe hunks to read in");
+ "no pipe bufs to read in");
break;
}
diff --git a/src/http/modules/ngx_http_gzip_filter.c b/src/http/modules/ngx_http_gzip_filter.c
index 4f43f34..eb94975 100644
--- a/src/http/modules/ngx_http_gzip_filter.c
+++ b/src/http/modules/ngx_http_gzip_filter.c
@@ -435,9 +435,9 @@
}
/*
- * We preallocate a memory for zlib in one hunk (200K-400K), this
+ * We preallocate a memory for zlib in one buffer (200K-400K), this
* dicreases a number of malloc() and free() calls and also probably
- * dicreases a number of syscalls.
+ * dicreases a number of syscalls (sbrk() or so).
* Besides we free() this memory as soon as the gzipping will complete
* and do not wait while a whole response will be sent to a client.
*
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index ed25c8e..643f7fa 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -701,7 +701,7 @@
/* rc == NGX_OK */
- if (c->tcp_nopush) {
+ if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log,
ngx_socket_errno,
@@ -710,7 +710,7 @@
return;
}
- c->tcp_nopush = 0;
+ c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
return;
}
@@ -1138,7 +1138,7 @@
return;
}
- /* TODO: preallocate event_pipe hunks, look "Content-Length" */
+ /* TODO: preallocate event_pipe bufs, look "Content-Length" */
rc = ngx_http_send_header(r);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 52e4a27..aeec7d2 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -567,7 +567,7 @@
if (!clcf->tcp_nopush) {
/* disable TCP_NOPUSH/TCP_CORK use */
- r->connection->tcp_nopush = -1;
+ r->connection->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
}
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 9487d06..97e1b94 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -92,7 +92,7 @@
if (rev->ready) {
/* deferred accept, aio, iocp */
- if (*ngx_accept_mutex) {
+ if (ngx_accept_mutex) {
if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
ngx_http_close_connection(c);
return;
@@ -562,10 +562,10 @@
/*
* If it's a pipelined request and a request line is not complete
- * then we have to copy it to the start of the r->header_in hunk.
+ * then we have to copy it to the start of the r->header_in buf.
* We have to copy it here only if the large client headers
* are enabled otherwise a request line had been already copied
- * to the start of the r->header_in hunk in ngx_http_set_keepalive().
+ * to the start of the r->header_in buf in ngx_http_set_keepalive().
*/
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
@@ -757,8 +757,10 @@
if (r->header_in->last == r->header_in->end) {
- /* if the large client headers are enabled then
- we need to compact r->header_in hunk */
+ /*
+ * if the large client headers are enabled then
+ * we need to compact r->header_in buf
+ */
if (cscf->large_client_header) {
offset = r->header_name_start - r->header_in->start;
@@ -1315,13 +1317,13 @@
ctx->action = "keepalive";
- if (c->tcp_nopush == 1) {
+ if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_connection_error(c, ngx_socket_errno, ngx_tcp_push_n " failed");
ngx_http_close_connection(c);
return;
}
- c->tcp_nopush = 0;
+ c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
}
if (rev->ready) {
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 77cabb5..cac8aed 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -223,15 +223,6 @@
ngx_http_request_body_t *request_body;
-#if 0
- ngx_temp_file_t *temp_file;
- ngx_chain_t *request_hunks;
- ngx_hunk_t *request_body_hunk;
- size_t remaining_body_len;
- void (*request_body_handler) (void *data);
- void *data;
-#endif
-
time_t lingering_time;
ngx_uint_t method;
diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c
index e23649e..48aba43 100644
--- a/src/http/ngx_http_write_filter.c
+++ b/src/http/ngx_http_write_filter.c
@@ -129,8 +129,8 @@
ngx_http_write_filter_module);
/*
- * avoid the output if there is no last hunk, no flush point,
- * there are the incoming hunks and the size of all hunks
+ * avoid the output if there is no last buf, no flush point,
+ * there are the incoming bufs and the size of all bufs
* is smaller than "postpone_output" directive
*/
diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c
index 5d551eb..8b906f0 100644
--- a/src/os/unix/ngx_files.c
+++ b/src/os/unix/ngx_files.c
@@ -125,7 +125,7 @@
ngx_err_t err;
ngx_array_t io;
- /* use pwrite() if there's the only hunk in a chain */
+ /* use pwrite() if there's the only buf in a chain */
if (cl->next == NULL) {
return ngx_write_file(file, cl->buf->pos,
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c
index 694ea22..abc3d19 100644
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c
+++ b/src/os/unix/ngx_freebsd_sendfile_chain.c
@@ -162,7 +162,9 @@
if (file) {
- if (ngx_freebsd_use_tcp_nopush && c->tcp_nopush == 0) {
+ if (ngx_freebsd_use_tcp_nopush
+ && c->tcp_nopush == NGX_TCP_NOPUSH_UNSET)
+ {
if (ngx_tcp_nopush(c->fd) == NGX_ERROR) {
err = ngx_errno;
@@ -180,7 +182,8 @@
}
} else {
- c->tcp_nopush = 1;
+ c->tcp_nopush = NGX_TCP_NOPUSH_SET;
+
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
"tcp_nopush");
}
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index 0c6b9d0..75f51cf 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -58,32 +58,32 @@
/* create the iovec and coalesce the neighbouring bufs */
for (cl = in; cl && header.nelts < IOV_MAX; cl = cl->next) {
- if (ngx_hunk_special(cl->hunk)) {
+ if (ngx_buf_special(cl->buf)) {
continue;
}
- if (!ngx_hunk_in_memory_only(cl->hunk)) {
+ if (!ngx_buf_in_memory_only(cl->buf)) {
break;
}
- if (prev == cl->hunk->pos) {
- iov->iov_len += cl->hunk->last - cl->hunk->pos;
+ if (prev == cl->buf->pos) {
+ iov->iov_len += cl->buf->last - cl->buf->pos;
} else {
ngx_test_null(iov, ngx_push_array(&header), NGX_CHAIN_ERROR);
- iov->iov_base = (void *) cl->hunk->pos;
- iov->iov_len = cl->hunk->last - cl->hunk->pos;
+ iov->iov_base = (void *) cl->buf->pos;
+ iov->iov_len = cl->buf->last - cl->buf->pos;
}
- prev = cl->hunk->last;
+ prev = cl->buf->last;
}
/* set TCP_CORK if there is a header before a file */
- if (!c->tcp_nopush == 0
+ if (c->tcp_nopush == NGX_TCP_NOPUSH_UNSET
&& header.nelts != 0
&& cl
- && cl->hunk->type & NGX_HUNK_FILE)
+ && cl->buf->in_file)
{
if (ngx_tcp_nopush(c->fd) == NGX_ERROR) {
err = ngx_errno;
@@ -100,32 +100,33 @@
}
} else {
- c->tcp_nopush = 1;
+ c->tcp_nopush = NGX_TCP_NOPUSH_SET;
+
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
"tcp_nopush");
}
}
- if (header.nelts == 0 && cl && cl->hunk->type & NGX_HUNK_FILE) {
+ if (header.nelts == 0 && cl && cl->buf->in_file) {
- /* get the file hunk */
+ /* get the file buf */
- file = cl->hunk;
+ file = cl->buf;
fsize = (size_t) (file->file_last - file->file_pos);
fprev = file->file_last;
cl = cl->next;
- /* coalesce the neighbouring file hunks */
+ /* coalesce the neighbouring file bufs */
- while (cl && (cl->hunk->type & NGX_HUNK_FILE)) {
- if (file->file->fd != cl->hunk->file->fd
- || fprev != cl->hunk->file_pos)
+ while (cl && (cl->buf->in_file)) {
+ if (file->file->fd != cl->buf->file->fd
+ || fprev != cl->buf->file_pos)
{
break;
}
- fsize += (size_t) (cl->hunk->file_last - cl->hunk->file_pos);
- fprev = cl->hunk->file_last;
+ fsize += (size_t) (cl->buf->file_last - cl->buf->file_pos);
+ fprev = cl->buf->file_last;
cl = cl->next;
}
}
@@ -199,7 +200,7 @@
for (cl = in; cl; cl = cl->next) {
- if (ngx_hunk_special(cl->hunk)) {
+ if (ngx_buf_special(cl->buf)) {
continue;
}
@@ -207,28 +208,28 @@
break;
}
- size = ngx_hunk_size(cl->hunk);
+ size = ngx_buf_size(cl->buf);
if (sent >= size) {
sent -= size;
- if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
- cl->hunk->pos = cl->hunk->last;
+ if (ngx_buf_in_memory(cl->buf)) {
+ cl->buf->pos = cl->buf->last;
}
- if (cl->hunk->type & NGX_HUNK_FILE) {
- cl->hunk->file_pos = cl->hunk->file_last;
+ if (cl->buf->in_file) {
+ cl->buf->file_pos = cl->buf->file_last;
}
continue;
}
- if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
- cl->hunk->pos += sent;
+ if (ngx_buf_in_memory(cl->buf)) {
+ cl->buf->pos += sent;
}
- if (cl->hunk->type & NGX_HUNK_FILE) {
- cl->hunk->file_pos += sent;
+ if (cl->buf->in_file) {
+ cl->buf->file_pos += sent;
}
break;
diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c
index 964027f..352c162 100644
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -43,42 +43,42 @@
/* create the sendfilevec and coalesce the neighbouring bufs */
for (cl = in; cl && vec.nelts < IOV_MAX; cl = cl->next) {
- if (ngx_hunk_special(cl->hunk)) {
+ if (ngx_buf_special(cl->buf)) {
continue;
}
- if (ngx_hunk_in_memory_only(cl->hunk)) {
+ if (ngx_buf_in_memory_only(cl->buf)) {
fd = SFV_FD_SELF;
- if (prev == cl->hunk->pos) {
- sfv->sfv_len += cl->hunk->last - cl->hunk->pos;
+ if (prev == cl->buf->pos) {
+ sfv->sfv_len += cl->buf->last - cl->buf->pos;
} else {
ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR);
sfv->sfv_fd = SFV_FD_SELF;
sfv->sfv_flag = 0;
- sfv->sfv_off = (off_t) (uintptr_t) cl->hunk->pos;
- sfv->sfv_len = cl->hunk->last - cl->hunk->pos;
+ sfv->sfv_off = (off_t) (uintptr_t) cl->buf->pos;
+ sfv->sfv_len = cl->buf->last - cl->buf->pos;
}
- prev = cl->hunk->last;
+ prev = cl->buf->last;
} else {
prev = NULL;
- if (fd == cl->hunk->file->fd && fprev == cl->hunk->file_pos) {
- sfv->sfv_len += cl->hunk->file_last - cl->hunk->file_pos;
+ if (fd == cl->buf->file->fd && fprev == cl->buf->file_pos) {
+ sfv->sfv_len += cl->buf->file_last - cl->buf->file_pos;
} else {
ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR);
- fd = cl->hunk->file->fd;
+ fd = cl->buf->file->fd;
sfv->sfv_fd = fd;
sfv->sfv_flag = 0;
- sfv->sfv_off = cl->hunk->file_pos;
- sfv->sfv_len = cl->hunk->file_last - cl->hunk->file_pos;
+ sfv->sfv_off = cl->buf->file_pos;
+ sfv->sfv_len = cl->buf->file_last - cl->buf->file_pos;
}
- fprev = cl->hunk->file_last;
+ fprev = cl->buf->file_last;
}
}
@@ -117,7 +117,7 @@
for (cl = in; cl; cl = cl->next) {
- if (ngx_hunk_special(cl->hunk)) {
+ if (ngx_buf_special(cl->buf)) {
continue;
}
@@ -125,28 +125,28 @@
break;
}
- size = ngx_hunk_size(cl->hunk);
+ size = ngx_buf_size(cl->buf);
if (sent >= size) {
sent -= size;
- if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
- cl->hunk->pos = cl->hunk->last;
+ if (ngx_buf_in_memory(cl->buf)) {
+ cl->buf->pos = cl->buf->last;
}
- if (cl->hunk->type & NGX_HUNK_FILE) {
- cl->hunk->file_pos = cl->hunk->file_last;
+ if (cl->buf->in_file) {
+ cl->buf->file_pos = cl->buf->file_last;
}
continue;
}
- if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
- cl->hunk->pos += sent;
+ if (ngx_buf_in_memory(cl->buf)) {
+ cl->buf->pos += sent;
}
- if (cl->hunk->type & NGX_HUNK_FILE) {
- cl->hunk->file_pos += sent;
+ if (cl->buf->in_file) {
+ cl->buf->file_pos += sent;
}
break;
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index 2185dcf..6ed4ff0 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -143,7 +143,7 @@
prev = buf;
size = 0;
- /* coalesce the neighbouring hunks */
+ /* coalesce the neighbouring bufs */
while (cl && prev == cl->buf->pos) {
size += cl->buf->last - cl->buf->pos;
diff --git a/src/os/win32/ngx_wsasend_chain.c b/src/os/win32/ngx_wsasend_chain.c
index 46e03da..4ada9ea 100644
--- a/src/os/win32/ngx_wsasend_chain.c
+++ b/src/os/win32/ngx_wsasend_chain.c
@@ -241,180 +241,3 @@
return cl;
}
-
-
-#if 0
-
-ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
-{
- int rc;
- char *prev;
- size_t size, sent;
- LPWSABUF wsabuf;
- ngx_err_t err;
- ngx_event_t *wev;
- ngx_array_t wsabufs;
- ngx_chain_t *ce;
- LPWSAOVERLAPPED ovlp;
-
-#if 0
-
-iocp:
- if ready
- get result
- update chain
- return if done;
- wsasend
-
-non-block
- for ( ;; ) {
- wsasend
- if no again
- update chain
- return if done;
- }
-
-
- for ( ;; ) {
-
- make buffers and limit data for both ovlp and nonblocked,
- configured in events module
-
- if (iocp && ready) {
- get result
-
- } else {
- if (file)
- transmitfile
- else
- wsasend
-
- if (iocp)
- return chain
- return chain if again
- here is result
- }
-
- if (result)
- update chain;
- return chain if done
- }
- }
-
-
-#endif
-
- wev = c->write;
-
- if (((ngx_event_flags & NGX_USE_AIO_EVENT) && !wev->ready)
- || ((ngx_event_flags & NGX_USE_AIO_EVENT) == 0))
- {
- /*
- * WSABUFs must be 4-byte aligned otherwise
- * WSASend() will return undocumented WSAEINVAL error.
- */
-
- ngx_init_array(wsabufs, c->pool, 10, sizeof(WSABUF), NGX_CHAIN_ERROR);
-
- prev = NULL;
- wsabuf = NULL;
-
- /* create the WSABUF and coalesce the neighbouring chain entries */
- for (ce = in; ce; ce = ce->next) {
-
- if (prev == ce->hunk->pos) {
- wsabuf->len += ce->hunk->last - ce->hunk->pos;
- prev = ce->hunk->last;
-
- } else {
- ngx_test_null(wsabuf, ngx_push_array(&wsabufs),
- NGX_CHAIN_ERROR);
- wsabuf->buf = ce->hunk->pos;
- wsabuf->len = ce->hunk->last - ce->hunk->pos;
- prev = ce->hunk->last;
- }
- }
-
- if (ngx_event_flags & NGX_USE_AIO_EVENT) {
- ovlp = (LPWSAOVERLAPPED) &c->write->ovlp;
- ngx_memzero(ovlp, sizeof(WSAOVERLAPPED));
-
- } else {
- ovlp = NULL;
- }
-
- rc = WSASend(c->fd, wsabufs.elts, wsabufs.nelts, &sent, 0, ovlp, NULL);
-
- if (rc == -1) {
- err = ngx_errno;
- if (err == WSA_IO_PENDING) {
- sent = 0;
-
- } else if (err == WSAEWOULDBLOCK) {
- sent = 0;
- ngx_log_error(NGX_LOG_INFO, c->log, err, "WSASend() EAGAIN");
-
- } else {
- ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
- return NGX_CHAIN_ERROR;
- }
-
- } else {
-
- if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
-
- /*
- * If a socket was bound with I/O completion port then
- * GetQueuedCompletionStatus() would anyway return its status
- * despite that WSASend() was already completed.
- */
-
- sent = 0;
- }
- }
-
- } else {
- if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
- wev->ready = 0;
-
- /* the overlapped WSASend() completed */
-
- if (wev->ovlp.error) {
- ngx_log_error(NGX_LOG_ERR, c->log, wev->ovlp.error,
- "WSASend() failed");
- return NGX_CHAIN_ERROR;
- }
-
- sent = wev->available;
- }
- }
-
- ngx_log_debug(c->log, "WSASend(): %d" _ sent);
-
- c->sent += sent;
-
- for (ce = in; ce && sent > 0; ce = ce->next) {
-
- size = ce->hunk->last - ce->hunk->pos;
-
- if (sent >= size) {
- sent -= size;
-
- if (ce->hunk->type & NGX_HUNK_IN_MEMORY) {
- ce->hunk->pos = ce->hunk->last;
- }
-
- continue;
- }
-
- if (ce->hunk->type & NGX_HUNK_IN_MEMORY) {
- ce->hunk->pos += sent;
- }
-
- break;
- }
-
- return ce;
-}
-
-#endif