Mercurial > hg > nginx
comparison 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 |
comparison
equal
deleted
inserted
replaced
165:894a01c6aea3 | 166:389d7ee9fa60 |
---|---|
22 int n; | 22 int n; |
23 ngx_event_t *wev; | 23 ngx_event_t *wev; |
24 | 24 |
25 wev = c->write; | 25 wev = c->write; |
26 | 26 |
27 if (wev->active) { | 27 if (!wev->ready) { |
28 return NGX_AGAIN; | 28 return NGX_AGAIN; |
29 } | 29 } |
30 | 30 |
31 ngx_log_debug(wev->log, "aio: wev->aio_complete: %d" _ wev->aio_complete); | 31 ngx_log_debug(wev->log, "aio: wev->complete: %d" _ wev->complete); |
32 | 32 |
33 if (!wev->aio_complete) { | 33 if (!wev->complete) { |
34 ngx_memzero(&wev->aiocb, sizeof(struct aiocb)); | 34 ngx_memzero(&wev->aiocb, sizeof(struct aiocb)); |
35 | 35 |
36 wev->aiocb.aio_fildes = c->fd; | 36 wev->aiocb.aio_fildes = c->fd; |
37 wev->aiocb.aio_buf = buf; | 37 wev->aiocb.aio_buf = buf; |
38 wev->aiocb.aio_nbytes = size; | 38 wev->aiocb.aio_nbytes = size; |
50 } | 50 } |
51 | 51 |
52 ngx_log_debug(wev->log, "aio_write: OK"); | 52 ngx_log_debug(wev->log, "aio_write: OK"); |
53 | 53 |
54 wev->active = 1; | 54 wev->active = 1; |
55 wev->ready = 0; | |
55 } | 56 } |
56 | 57 |
57 wev->aio_complete = 0; | 58 wev->complete = 0; |
58 | 59 |
59 n = aio_error(&wev->aiocb); | 60 n = aio_error(&wev->aiocb); |
60 if (n == -1) { | 61 if (n == -1) { |
61 ngx_log_error(NGX_LOG_CRIT, wev->log, ngx_errno, "aio_error() failed"); | 62 ngx_log_error(NGX_LOG_CRIT, wev->log, ngx_errno, "aio_error() failed"); |
62 wev->error = 1; | 63 wev->error = 1; |
63 return NGX_ERROR; | 64 return NGX_ERROR; |
64 } | 65 } |
65 | 66 |
66 if (n != 0) { | 67 if (n != 0) { |
67 if (n == NGX_EINPROGRESS) { | 68 if (n == NGX_EINPROGRESS) { |
68 if (!wev->active) { | 69 if (wev->ready) { |
69 ngx_log_error(NGX_LOG_ALERT, wev->log, n, | 70 ngx_log_error(NGX_LOG_ALERT, wev->log, n, |
70 "aio_write() still in progress"); | 71 "aio_write() still in progress"); |
72 wev->ready = 0; | |
71 } | 73 } |
72 return NGX_AGAIN; | 74 return NGX_AGAIN; |
73 } | 75 } |
74 | 76 |
75 ngx_log_error(NGX_LOG_CRIT, wev->log, n, "aio_write() failed"); | 77 ngx_log_error(NGX_LOG_CRIT, wev->log, n, "aio_write() failed"); |
76 wev->error = 1; | 78 wev->error = 1; |
79 wev->ready = 0; | |
80 | |
81 #if 1 | |
82 n = aio_return(&wev->aiocb); | |
83 if (n == -1) { | |
84 ngx_log_error(NGX_LOG_ALERT, wev->log, ngx_errno, | |
85 "aio_return() failed"); | |
86 } | |
87 | |
88 ngx_log_error(NGX_LOG_CRIT, wev->log, n, "aio_return() %d", n); | |
89 #endif | |
90 | |
77 return NGX_ERROR; | 91 return NGX_ERROR; |
78 } | 92 } |
79 | 93 |
80 n = aio_return(&wev->aiocb); | 94 n = aio_return(&wev->aiocb); |
81 if (n == -1) { | 95 if (n == -1) { |
82 ngx_log_error(NGX_LOG_ALERT, wev->log, ngx_errno, | 96 ngx_log_error(NGX_LOG_ALERT, wev->log, ngx_errno, |
83 "aio_return() failed"); | 97 "aio_return() failed"); |
84 | 98 |
85 wev->error = 1; | 99 wev->error = 1; |
100 wev->ready = 0; | |
86 return NGX_ERROR; | 101 return NGX_ERROR; |
87 } | 102 } |
88 | 103 |
89 wev->active = 0; | |
90 | 104 |
91 ngx_log_debug(wev->log, "aio_write: %d" _ n); | 105 ngx_log_debug(wev->log, "aio_write: %d" _ n); |
92 | 106 |
93 if (n == 0) { | 107 wev->active = 0; |
94 wev->eof = 1; | 108 wev->ready = 1; |
95 } | |
96 | 109 |
97 return n; | 110 return n; |
98 } | 111 } |