aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-02-18 15:45:21 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-02-18 15:45:21 +0000
commit8ae18a10d6c7c94fbb4fa04a64c6fa1e2a38fe16 (patch)
treeb6141281a8b432f4ccfeb6f6f670a0e38b9e01b4
parent22a7c50463654139e14b4645a1ac8e35feec9900 (diff)
downloadnginx-8ae18a10d6c7c94fbb4fa04a64c6fa1e2a38fe16.tar.gz
nginx-8ae18a10d6c7c94fbb4fa04a64c6fa1e2a38fe16.zip
nginx-0.0.2-2004-02-18-18:45:21 import
-rw-r--r--auto/cc4
-rw-r--r--src/event/modules/ngx_rtsig_module.c4
-rw-r--r--src/event/ngx_event.h1
-rw-r--r--src/os/unix/ngx_freebsd_config.h6
-rw-r--r--src/os/unix/ngx_freebsd_sendfile_chain.c4
-rw-r--r--src/os/unix/ngx_linux_config.h1
-rw-r--r--src/os/unix/ngx_linux_sendfile_chain.c2
-rw-r--r--src/os/unix/ngx_solaris_config.h1
-rw-r--r--src/os/unix/ngx_solaris_sendfilev_chain.c15
9 files changed, 28 insertions, 10 deletions
diff --git a/auto/cc b/auto/cc
index 082b13f75..6edae8815 100644
--- a/auto/cc
+++ b/auto/cc
@@ -24,7 +24,7 @@ case $CC in
# debug
CFLAGS="$CFLAGS -g"
- CFLAGS="$CFLAGS -D HAVE_GCC_VARIADIC_MACROS=1"
+ have=HAVE_GCC_VARIADIC_MACROS . auto/have
OBJEXT=o
OBJOUT="-o "
@@ -50,7 +50,7 @@ case $CC in
# stop on warning
CFLAGS="$CFLAGS -Werror"
- CFLAGS="$CFLAGS -D HAVE_C99_VARIADIC_MACROS=1"
+ have=HAVE_C99_VARIADIC_MACROS . auto/have
OBJEXT=o
OBJOUT="-o "
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 32c544a8d..99b255560 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -40,7 +40,7 @@ static void ngx_rtsig_done(ngx_cycle_t *cycle);
static int ngx_rtsig_add_connection(ngx_connection_t *c);
static int ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags);
static int ngx_rtsig_process_events(ngx_log_t *log);
-static int ngx_rtsig_process_overlow(ngx_log_t *log);
+static int ngx_rtsig_process_overflow(ngx_log_t *log);
static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle);
static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -310,7 +310,7 @@ int ngx_rtsig_process_events(ngx_log_t *log)
}
-static int ngx_rtsig_process_overlow(ngx_log_t *log)
+static int ngx_rtsig_process_overflow(ngx_log_t *log)
{
if (ngx_poll_module_ctx.actions.process(log) == NGX_OK) {
ngx_event_actions = ngx_rtsig_module_ctx.actions;
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 1a05751a1..83ce81436 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -287,6 +287,7 @@ extern ngx_event_actions_t ngx_event_actions;
#define NGX_WRITE_EVENT POLLOUT
#define NGX_LEVEL_EVENT 0
+#define NGX_ONESHOT_EVENT 1
#elif (HAVE_EPOLL)
diff --git a/src/os/unix/ngx_freebsd_config.h b/src/os/unix/ngx_freebsd_config.h
index 3d53d2026..e447340a8 100644
--- a/src/os/unix/ngx_freebsd_config.h
+++ b/src/os/unix/ngx_freebsd_config.h
@@ -11,6 +11,7 @@
#include <fcntl.h>
#include <string.h>
#include <signal.h>
+#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
@@ -71,6 +72,11 @@
#endif
+#ifndef IOV_MAX
+#define IOV_MAX 1024
+#endif
+
+
#ifndef HAVE_INHERITED_NONBLOCK
#define HAVE_INHERITED_NONBLOCK 1
#endif
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c
index f784b1f1d..d5e1831bc 100644
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c
+++ b/src/os/unix/ngx_freebsd_sendfile_chain.c
@@ -73,7 +73,7 @@ ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in)
prev = NULL;
iov = NULL;
- for (cl = in; cl; cl = cl->next) {
+ for (cl = in; cl && header.nelts < IOV_MAX; cl = cl->next) {
if (ngx_hunk_special(cl->hunk)) {
continue;
}
@@ -123,7 +123,7 @@ ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in)
prev = NULL;
iov = NULL;
- for ( /* void */; cl; cl = cl->next) {
+ for ( /* void */; cl && trailer.nelts < IOV_MAX; cl = cl->next) {
if (ngx_hunk_special(cl->hunk)) {
continue;
}
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index 1ca1c1f0d..23745df07 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -17,6 +17,7 @@
#include <fcntl.h>
#include <string.h>
#include <signal.h>
+#include <limits.h>
#include <time.h>
#include <sys/types.h>
#include <sys/time.h>
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index 39c2e831d..4fa8f835c 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -52,7 +52,7 @@ ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in)
/* create the iovec and coalesce the neighbouring hunks */
- for (cl = in; cl; cl = cl->next) {
+ for (cl = in; cl && header.nelts < IOV_MAX; cl = cl->next) {
if (ngx_hunk_special(cl->hunk)) {
continue;
}
diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h
index f4f8df2af..db74aebe5 100644
--- a/src/os/unix/ngx_solaris_config.h
+++ b/src/os/unix/ngx_solaris_config.h
@@ -18,6 +18,7 @@
#include <fcntl.h>
#include <string.h>
#include <signal.h>
+#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c
index a5b741f27..9cd1618a3 100644
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -16,7 +16,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in)
sendfilevec_t *sfv;
ngx_array_t vec;
ngx_event_t *wev;
- ngx_chain_t *cl;
+ ngx_chain_t *cl, *tail;
wev = c->write;
@@ -37,7 +37,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in)
/* create the sendfilevec and coalesce the neighbouring hunks */
- for (cl = in; cl; cl = cl->next) {
+ for (cl = in; cl && vec.nelts < IOV_MAX; cl = cl->next) {
if (ngx_hunk_special(cl->hunk)) {
continue;
}
@@ -77,6 +77,13 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in)
}
}
+ /*
+ * the tail is the rest of the chain that exceeded a single
+ * sendfilev() capability, IOV_MAX in Solaris is only 16
+ */
+
+ tail = cl;
+
n = sendfilev(c->fd, vec.elts, vec.nelts, &sent);
if (n == -1) {
@@ -142,7 +149,9 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in)
in = cl;
- } while (eintr);
+ /* "tail == in" means that a single sendfilev() is complete */
+
+ } while ((tail && tail == in) || eintr);
if (in) {
wev->ready = 0;