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