diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-10-30 08:51:06 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-10-30 08:51:06 +0000 |
commit | 68ee8f144242965c9650ad99604d1717c0f84c18 (patch) | |
tree | 7327fe5fcc7b45d0ade16767c74e918b8ba6f328 /src/os/unix/ngx_aio_write.c | |
parent | 14be46ee9862352fc055da8005e9bdf3dd1bc16e (diff) | |
download | nginx-68ee8f144242965c9650ad99604d1717c0f84c18.tar.gz nginx-68ee8f144242965c9650ad99604d1717c0f84c18.zip |
nginx-0.0.1-2003-10-30-11:51:06 import
Diffstat (limited to 'src/os/unix/ngx_aio_write.c')
-rw-r--r-- | src/os/unix/ngx_aio_write.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/os/unix/ngx_aio_write.c b/src/os/unix/ngx_aio_write.c index dcdecc5b6..dc2c876e5 100644 --- 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 *c, char *buf, size_t size) 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_complete: %d" _ wev->aio_complete); 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_complete: %d" _ wev->aio_complete); 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_complete: %d" _ wev->aio_complete); "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; } |