Mercurial > hg > nginx
diff src/os/unix/ngx_aio_write.c @ 166:389d7ee9fa60
nginx-0.0.1-2003-10-30-11:51:06 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 30 Oct 2003 08:51:06 +0000 |
parents | 84036764e215 |
children | 70e1c7d2b83d |
line wrap: on
line diff
--- a/src/os/unix/ngx_aio_write.c +++ b/src/os/unix/ngx_aio_write.c @@ -24,13 +24,13 @@ ssize_t ngx_aio_write(ngx_connection_t * wev = c->write; - if (wev->active) { + if (!wev->ready) { return NGX_AGAIN; } -ngx_log_debug(wev->log, "aio: wev->aio_complete: %d" _ wev->aio_complete); +ngx_log_debug(wev->log, "aio: wev->complete: %d" _ wev->complete); - if (!wev->aio_complete) { + if (!wev->complete) { ngx_memzero(&wev->aiocb, sizeof(struct aiocb)); wev->aiocb.aio_fildes = c->fd; @@ -52,9 +52,10 @@ ngx_log_debug(wev->log, "aio: wev->aio_c ngx_log_debug(wev->log, "aio_write: OK"); wev->active = 1; + wev->ready = 0; } - wev->aio_complete = 0; + wev->complete = 0; n = aio_error(&wev->aiocb); if (n == -1) { @@ -65,15 +66,28 @@ ngx_log_debug(wev->log, "aio: wev->aio_c if (n != 0) { if (n == NGX_EINPROGRESS) { - if (!wev->active) { + if (wev->ready) { ngx_log_error(NGX_LOG_ALERT, wev->log, n, "aio_write() still in progress"); + wev->ready = 0; } return NGX_AGAIN; } ngx_log_error(NGX_LOG_CRIT, wev->log, n, "aio_write() failed"); wev->error = 1; + wev->ready = 0; + +#if 1 + n = aio_return(&wev->aiocb); + if (n == -1) { + ngx_log_error(NGX_LOG_ALERT, wev->log, ngx_errno, + "aio_return() failed"); + } + + ngx_log_error(NGX_LOG_CRIT, wev->log, n, "aio_return() %d", n); +#endif + return NGX_ERROR; } @@ -83,16 +97,15 @@ ngx_log_debug(wev->log, "aio: wev->aio_c "aio_return() failed"); wev->error = 1; + wev->ready = 0; return NGX_ERROR; } - wev->active = 0; ngx_log_debug(wev->log, "aio_write: %d" _ n); - if (n == 0) { - wev->eof = 1; - } + wev->active = 0; + wev->ready = 1; return n; }