nginx-0.0.3-2004-04-15-00:34:05 import
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 56a8914..a784040 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -277,6 +277,13 @@
switch (ctx->argv[i][1]) {
case 'c':
+ if (ctx->argv[i + 1] == NULL) {
+ ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
+ "the option: \"%s\" requires file name",
+ ctx->argv[i]);
+ return NGX_ERROR;
+ }
+
cycle->conf_file.data = (u_char *) ctx->argv[++i];
cycle->conf_file.len = ngx_strlen(cycle->conf_file.data);
break;
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 4e3e77b..dea3e5c 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -101,11 +101,6 @@
#define ngx_inline inline
#endif
-
-#ifndef INFTIM /* Linux */
-#define INFTIM -1
-#endif
-
#ifndef INADDR_NONE /* Solaris */
#define INADDR_NONE ((unsigned int) -1)
#endif
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index c04f8cf..077b120 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -23,7 +23,7 @@
{
void *rv;
ngx_uint_t i, n, failed;
- ngx_log_t *log;
+ ngx_log_t *log, *new_log;
ngx_conf_t conf;
ngx_pool_t *pool;
ngx_cycle_t *cycle, **old;
@@ -44,6 +44,9 @@
}
cycle->pool = pool;
+ pool->log = log;
+ cycle->log = log;
+
cycle->old_cycle = old_cycle;
cycle->conf_file = old_cycle->conf_file;
@@ -71,7 +74,7 @@
cycle->open_files.pool = pool;
- if (!(cycle->log = ngx_log_create_errlog(cycle, NULL))) {
+ if (!(new_log = ngx_log_create_errlog(cycle, NULL))) {
ngx_destroy_pool(pool);
return NULL;
}
@@ -129,12 +132,14 @@
conf.module_type = NGX_CORE_MODULE;
conf.cmd_type = NGX_MAIN_CONF;
+ cycle->log = new_log;
if (ngx_conf_parse(&conf, &cycle->conf_file) != NGX_CONF_OK) {
ngx_destroy_pool(pool);
return NULL;
}
+ cycle->log = log;
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_CORE_MODULE) {
@@ -203,6 +208,8 @@
}
}
+ cycle->log = new_log;
+ pool->log = new_log;
if (!failed) {
if (old_cycle->listening.nelts) {
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 41188ae..6007c0d 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -236,6 +236,7 @@
}
ev->active = 0;
+ ev->posted = 0;
if (flags & NGX_CLOSE_EVENT) {
return NGX_OK;
@@ -312,7 +313,7 @@
{
int events;
ngx_int_t i;
- ngx_uint_t j;
+ ngx_uint_t j, lock, expire;
size_t n;
ngx_msec_t timer;
ngx_err_t err;
@@ -322,13 +323,43 @@
struct dvpoll dvp;
struct timeval tv;
- timer = ngx_event_find_timer();
- ngx_old_elapsed_msec = ngx_elapsed_msec;
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
- if (timer == 0) {
- timer = (ngx_msec_t) INFTIM;
+ if (timer != 0) {
+ break;
+ }
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "devpoll expired timer");
+
+ ngx_event_expire_timers(0);
}
+ /* NGX_TIMER_INFINITE == INFTIM */
+
+ if (timer == NGX_TIMER_INFINITE) {
+ expire = 0;
+
+ } else {
+ expire = 1;
+ }
+
+ if (ngx_accept_mutex) {
+ if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ if (ngx_accept_mutex_held == 0
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
+ {
+ timer = ngx_accept_mutex_delay;
+ expire = 0;
+ }
+ }
+
+ ngx_old_elapsed_msec = ngx_elapsed_msec;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"devpoll timer: %d", timer);
@@ -337,6 +368,7 @@
if (write(dp, change_list, n) != (ssize_t) n) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"write(/dev/poll) failed");
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
}
@@ -363,10 +395,11 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
cycle->log, err, "ioctl(DP_POLL) failed");
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
- if (timer != (ngx_msec_t) INFTIM) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -375,10 +408,18 @@
if (events == 0) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"ioctl(DP_POLL) returned no events without timeout");
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
}
+ if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+ ngx_accept_mutex_unlock();
+ return NGX_ERROR;
+ }
+
+ lock = 1;
+
for (i = 0; i < events; i++) {
c = &ngx_cycle->connections[event_list[i].fd];
@@ -421,25 +462,68 @@
event_list[i].events, event_list[i].revents);
}
- if ((event_list[i].events & (POLLIN|POLLERR|POLLHUP))
- && c->read->active)
- {
- c->read->ready = 1;
- c->read->event_handler(c->read);
- }
-
if ((event_list[i].events & (POLLOUT|POLLERR|POLLHUP))
&& c->write->active)
{
c->write->ready = 1;
- c->write->event_handler(c->write);
+
+ if (!ngx_threaded && !ngx_accept_mutex_held) {
+ c->write->event_handler(c->write);
+
+ } else {
+ ngx_post_event(c->write);
+ }
+ }
+
+ /*
+ * POLLIN must be handled after POLLOUT because we use
+ * the optimization to avoid the unnecessary mutex locking/unlocking
+ * if the accept event is the last one.
+ */
+
+ if ((event_list[i].events & (POLLIN|POLLERR|POLLHUP))
+ && c->read->active)
+ {
+ c->read->ready = 1;
+
+ if (!ngx_threaded && !ngx_accept_mutex_held) {
+ c->read->event_handler(c->read);
+
+ } else if (!c->read->accept) {
+ ngx_post_event(c->read);
+
+ } else {
+ ngx_mutex_unlock(ngx_posted_events_mutex);
+
+ c->read->event_handler(c->read);
+
+ if (i + 1 == events) {
+ lock = 0;
+ break;
+ }
+
+ if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+ ngx_accept_mutex_unlock();
+ return NGX_ERROR;
+ }
+ }
}
}
- if (timer != (ngx_msec_t) INFTIM && delta) {
+ if (lock) {
+ ngx_mutex_unlock(ngx_posted_events_mutex);
+ }
+
+ ngx_accept_mutex_unlock();
+
+ if (expire && delta) {
ngx_event_expire_timers((ngx_msec_t) delta);
}
+ if (!ngx_threaded) {
+ ngx_event_process_posted(cycle);
+ }
+
return NGX_OK;
}
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index cad7ed9..f5bd6e5 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -353,28 +353,37 @@
ngx_connection_t *c;
ngx_epoch_msec_t delta;
- timer = ngx_event_find_timer();
- ngx_old_elapsed_msec = ngx_elapsed_msec;
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
- if (timer == -1) {
- timer = 0;
- expire = 1;
+ if (timer != 0) {
+ break;
+ }
- } else if (timer == 0) {
- timer = (ngx_msec_t) -1;
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "epoll expired timer");
+
+ ngx_event_expire_timers(0);
+ }
+
+ /* NGX_TIMER_INFINITE == INFTIM */
+
+ if (timer == NGX_TIMER_INFINITE) {
expire = 0;
} else {
expire = 1;
}
+ ngx_old_elapsed_msec = ngx_elapsed_msec;
+
if (ngx_accept_mutex) {
if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
return NGX_ERROR;
}
if (ngx_accept_mutex_held == 0
- && (timer == -1 || timer > ngx_accept_mutex_delay))
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
{
timer = ngx_accept_mutex_delay;
expire = 0;
@@ -398,7 +407,7 @@
delta = ngx_elapsed_msec;
ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
- if (timer != (ngx_msec_t) -1) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index bf37bf5..33dd712 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -353,20 +353,34 @@
struct timeval tv;
struct timespec ts, *tp;
- timer = ngx_event_find_timer();
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
#if (NGX_THREADS)
- if (timer == NGX_TIMER_ERROR) {
- return NGX_ERROR;
- }
+ if (timer == NGX_TIMER_ERROR) {
+ return NGX_ERROR;
+ }
- /*
- * TODO: if timer is 0 and any worker thread is still busy
- * then set 500 ms timeout
- */
+ /*
+ * TODO: if timer is NGX_TIMER_INFINITE and any worker thread
+ * is still busy then set the configurable 500ms timeout
+ * to wake up another worker thread
+ */
#endif
+ if (timer != 0) {
+ break;
+ }
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "kevent expired timer");
+
+ ngx_event_expire_timers(0);
+
+ /* TODO: if ngx_threaded then wake up the worker thread */
+ }
+
ngx_old_elapsed_msec = ngx_elapsed_msec;
expire = 1;
@@ -376,26 +390,21 @@
}
if (ngx_accept_mutex_held == 0
- && (timer == 0 || timer > ngx_accept_mutex_delay))
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
{
timer = ngx_accept_mutex_delay;
expire = 0;
}
}
- if (timer == -1) {
- ts.tv_sec = 0;
- ts.tv_nsec = 0;
- tp = &ts;
+ if (timer == NGX_TIMER_INFINITE) {
+ tp = NULL;
+ expire = 0;
- } else if (timer) {
+ } else {
ts.tv_sec = timer / 1000;
ts.tv_nsec = (timer % 1000) * 1000000;
tp = &ts;
-
- } else {
- tp = NULL;
- expire = 0;
}
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -427,7 +436,7 @@
return NGX_ERROR;
}
- if (timer) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -550,6 +559,8 @@
ngx_accept_mutex_unlock();
+ /* TODO: wake up worker thread */
+
if (expire && delta) {
ngx_event_expire_timers((ngx_msec_t) delta);
}
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index ffe59d4..968180d 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -277,14 +277,22 @@
expire = 0;
} else {
- timer = ngx_event_find_timer();
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
- if (timer == -1) {
- timer = 0;
- expire = 1;
+ if (timer != 0) {
+ break;
+ }
- } else if (timer == 0) {
- timer = (ngx_msec_t) INFTIM;
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "poll expired timer");
+
+ ngx_event_expire_timers(0);
+ }
+
+ /* NGX_TIMER_INFINITE == INFTIM */
+
+ if (timer == NGX_TIMER_INFINITE) {
expire = 0;
} else {
@@ -308,7 +316,7 @@
}
if (ngx_accept_mutex_held == 0
- && (timer == (ngx_msec_t) INFTIM || timer > ngx_accept_mutex_delay))
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
{
timer = ngx_accept_mutex_delay;
expire = 0;
@@ -341,7 +349,7 @@
return NGX_ERROR;
}
- if (timer != (ngx_msec_t) INFTIM) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 1923461..b55f84c 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -192,6 +192,7 @@
{
int signo;
ngx_int_t instance, i;
+ ngx_uint_t expire;
size_t n;
ngx_msec_t timer;
ngx_err_t err;
@@ -199,22 +200,50 @@
struct timeval tv;
struct timespec ts, *tp;
struct sigaction sa;
- ngx_connection_t *c;
ngx_epoch_msec_t delta;
+ ngx_connection_t *c;
ngx_rtsig_conf_t *rtscf;
- timer = ngx_event_find_timer();
- ngx_old_elapsed_msec = ngx_elapsed_msec;
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
- if (timer) {
+ if (timer != 0) {
+ break;
+ }
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "rtsig expired timer");
+
+ ngx_event_expire_timers(0);
+ }
+
+ expire = 1;
+
+ if (ngx_accept_mutex) {
+ if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ if (ngx_accept_mutex_held == 0
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
+ {
+ timer = ngx_accept_mutex_delay;
+ expire = 0;
+ }
+ }
+
+ if (timer == NGX_TIMER_INFINITE) {
+ tp = NULL;
+ expire = 0;
+
+ } else {
ts.tv_sec = timer / 1000;
ts.tv_nsec = (timer % 1000) * 1000000;
tp = &ts;
-
- } else {
- tp = NULL;
}
+ ngx_old_elapsed_msec = ngx_elapsed_msec;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"rtsig timer: %d", timer);
@@ -237,10 +266,11 @@
if (err) {
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
cycle->log, err, "sigtimedwait() failed");
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
- if (timer) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -263,18 +293,50 @@
if (si.si_band & (POLLIN|POLLHUP|POLLERR)) {
if (c->read->active) {
c->read->ready = 1;
- c->read->event_handler(c->read);
+
+ if (!ngx_threaded && !ngx_accept_mutex_held) {
+ c->read->event_handler(c->read);
+
+ } else if (c->read->accept) {
+ c->read->event_handler(c->read);
+
+ } else {
+ if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+ ngx_accept_mutex_unlock();
+ return NGX_ERROR;
+ }
+
+ ngx_post_event(c->read);
+
+ ngx_mutex_unlock(ngx_posted_events_mutex);
+ }
}
}
if (si.si_band & (POLLOUT|POLLHUP|POLLERR)) {
if (c->write->active) {
c->write->ready = 1;
- c->write->event_handler(c->write);
+
+ if (!ngx_threaded && !ngx_accept_mutex_held) {
+ c->write->event_handler(c->write);
+
+ } else {
+
+ if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+ ngx_accept_mutex_unlock();
+ return NGX_ERROR;
+ }
+
+ ngx_post_event(c->write);
+
+ ngx_mutex_unlock(ngx_posted_events_mutex);
+ }
}
}
} else if (signo == SIGIO) {
+ ngx_accept_mutex_unlock();
+
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"signal queue overflowed: "
"SIGIO, fd:%d, band:%X", si.si_fd, si.si_band);
@@ -300,13 +362,21 @@
} else {
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"sigtimedwait() returned unexpected signal: %d", signo);
+ ngx_accept_mutex_unlock();
return NGX_ERROR;
}
- if (timer != (ngx_msec_t) -1 && delta) {
+
+ ngx_accept_mutex_unlock();
+
+ if (expire && delta) {
ngx_event_expire_timers((ngx_msec_t) delta);
}
+ if (!ngx_threaded) {
+ ngx_event_process_posted(cycle);
+ }
+
return NGX_OK;
}
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 0f3848d..91563f2 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -263,7 +263,19 @@
static ngx_epoch_msec_t deltas = 0;
#endif
- timer = ngx_event_find_timer();
+ for ( ;; ) {
+ timer = ngx_event_find_timer();
+
+ if (timer != 0) {
+ break;
+ }
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "select expired timer");
+
+ ngx_event_expire_timers(0);
+ }
+
ngx_old_elapsed_msec = ngx_elapsed_msec;
expire = 1;
@@ -276,7 +288,7 @@
}
if (ngx_accept_mutex_held == 0
- && (timer == 0 || timer > ngx_accept_mutex_delay))
+ && (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay))
{
timer = ngx_accept_mutex_delay;
expire = 0;
@@ -306,19 +318,14 @@
}
#endif
- if (timer == -1) {
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- tp = &tv;
+ if (timer == NGX_TIMER_INFINITE) {
+ tp = NULL;
+ expire = 0;
- } else if (timer) {
+ } else {
tv.tv_sec = timer / 1000;
tv.tv_usec = (timer % 1000) * 1000;
tp = &tv;
-
- } else {
- tp = NULL;
- expire = 0;
}
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
@@ -344,7 +351,7 @@
#if (HAVE_SELECT_CHANGE_TIMEOUT)
- if (timer) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = timer - (tv.tv_sec * 1000 + tv.tv_usec / 1000);
/*
@@ -383,7 +390,7 @@
delta = ngx_elapsed_msec;
ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
- if (timer) {
+ if (timer != NGX_TIMER_INFINITE) {
delta = ngx_elapsed_msec - delta;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index ab97ee1..a3d4d80 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -40,7 +40,7 @@
ngx_rbtree_t *node;
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
- return 0;
+ return NGX_TIMER_INFINITE;
}
if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) {
@@ -59,7 +59,7 @@
(node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec);
#endif
- return timer > 0 ? timer: -1 ;
+ return timer > 0 ? timer: 0 ;
}
@@ -83,7 +83,7 @@
ngx_mutex_unlock(ngx_event_timer_mutex);
- if ((ngx_msec_t) node->key <= (ngx_msec_t)
+ if (node->key <= (ngx_msec_t)
(ngx_old_elapsed_msec + timer) / NGX_TIMER_RESOLUTION)
{
ev = (ngx_event_t *)
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index e0311b6..3ff0e7c 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -7,7 +7,8 @@
#include <ngx_event.h>
-#define NGX_TIMER_ERROR (ngx_msec_t) -1
+#define NGX_TIMER_INFINITE -1
+#define NGX_TIMER_ERROR -2
/*
* 32 bit timer key value resolution
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index d36d665..95cf54a 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -93,4 +93,8 @@
#define ngx_setproctitle(title)
+/* STUB */
+#define HAVE_LITTLE_ENDIAN 1
+
+
#endif /* _NGX_LINUX_CONFIG_H_INCLUDED_ */
diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h
index 7c02c44..431841c 100644
--- a/src/os/unix/ngx_solaris_config.h
+++ b/src/os/unix/ngx_solaris_config.h
@@ -26,7 +26,6 @@
#include <sys/socket.h>
#include <sys/sendfile.h>
#include <sys/filio.h> /* FIONBIO */
-#include <sys/stropts.h> /* INFTIM */
#include <sys/systeminfo.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -75,4 +74,8 @@
#define ngx_setproctitle(title)
+/* STUB */
+#define HAVE_LITTLE_ENDIAN 1
+
+
#endif /* _NGX_SOLARIS_CONFIG_H_INCLUDED_ */