diff --git a/auto/os/solaris b/auto/os/solaris index 65bda26e0..bd6559a9f 100644 --- a/auto/os/solaris +++ b/auto/os/solaris @@ -25,6 +25,18 @@ case $PLATFORM in esac +case $PLATFORM in + + *:sun4u) + CFLAGS="$CFLAGS -mcpu=v9" + ;; + + *) + ;; + +esac + + if [ $ZLIB_ASM != NO ]; then echo "$0: error: the --with-zlib-asm=CPU option is not supported" echo "on that platform" diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c index 2c9985f20..b6d5a3f1d 100644 --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c @@ -79,7 +79,7 @@ void ngx_time_init() ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1; ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1; -#if (TIME_T_SIZE > SIG_ATOMIC_T_SIZE) +#if (NGX_THREADS && (TIME_T_SIZE > SIG_ATOMIC_T_SIZE)) ngx_cached_time = &cached_time[0]; #endif @@ -132,7 +132,7 @@ void ngx_time_update(time_t s) slot++; } -#if (TIME_T_SIZE > SIG_ATOMIC_T_SIZE) +#if (NGX_THREADS && (TIME_T_SIZE > SIG_ATOMIC_T_SIZE)) ngx_cached_time = &cached_time[slot]; #endif diff --git a/src/http/modules/ngx_http_gzip_filter.c b/src/http/modules/ngx_http_gzip_filter.c index dc101b7fc..1a373784d 100644 --- a/src/http/modules/ngx_http_gzip_filter.c +++ b/src/http/modules/ngx_http_gzip_filter.c @@ -440,8 +440,9 @@ static ngx_int_t ngx_http_gzip_body_filter(ngx_http_request_t *r, * 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. * - * 8K is for zlib deflate_state. It takes 5816 bytes on x86 - * and 5920 bytes on amd64. + * 8K is for zlib deflate_state, it takes + * * 5816 bytes on x86 and sparc64 (32-bit mode) + * * 5920 bytes on amd64 and sparc64 */ ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9)); @@ -803,9 +804,7 @@ static void *ngx_http_gzip_filter_alloc(void *opaque, u_int items, u_int size) if (alloc % 512 != 0) { /* - * The zlib deflate_state allocation, it takes 5816 bytes on x86 - * and 5920 bytes on amd64. - * We allocate 8K. + * the zlib deflate_state allocation, it takes about 6K, we allocate 8K */ alloc = (alloc + ngx_pagesize - 1) & ~(ngx_pagesize - 1); diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index 4dd1e82ee..8ecdfd11f 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -218,9 +218,15 @@ struct ngx_http_cleanup_s { typedef struct { - ngx_http_request_t *request; - ngx_array_t large_buffers; - ngx_uint_t pipeline; /* unsigned pipeline:1; */ + ngx_http_request_t *request; + + ngx_buf_t **busy; + ngx_uint_t nbusy; + + ngx_buf_t **free; + ngx_uint_t nfree; + + ngx_uint_t pipeline; /* unsigned pipeline:1; */ } ngx_http_connection_t; diff --git a/src/os/unix/ngx_atomic.h b/src/os/unix/ngx_atomic.h index 41c670475..7f740381b 100644 --- a/src/os/unix/ngx_atomic.h +++ b/src/os/unix/ngx_atomic.h @@ -86,7 +86,7 @@ static ngx_inline uint32_t ngx_atomic_inc(ngx_atomic_t *value) __asm__ volatile ( - "casa [%1]ASI_P, %2, %0" + "casa [%1] 0x80, %2, %0" : "+r" (res) : "r" (value), "r" (old)); @@ -112,7 +112,7 @@ static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock, __asm__ volatile ( - "casa [%1]ASI_P, %2, %0" + "casa [%1] 0x80, %2, %0" : "+r" (res) : "r" (lock), "r" (old)); @@ -124,8 +124,8 @@ static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock, typedef volatile uint32_t ngx_atomic_t; /* STUB */ -#define ngx_atomic_inc(x) (*(x))++; -#define ngx_atomic_dec(x) (*(x))--; +#define ngx_atomic_inc(x) ++(*(x)); +#define ngx_atomic_dec(x) --(*(x)); #define ngx_atomic_cmp_set(lock, old, set) 1 /**/ diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c index d249e8186..f6dca9c15 100644 --- a/src/os/unix/ngx_solaris_sendfilev_chain.c +++ b/src/os/unix/ngx_solaris_sendfilev_chain.c @@ -18,8 +18,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, int fd; u_char *prev; off_t fprev, sprev, send, aligned; - size_t size, sent; - ssize_t n; + ssize_t size, sent, n; ngx_int_t eintr, complete; ngx_err_t err; sendfilevec_t *sfv, sfvs[NGX_SENDFILEVECS];