Mercurial > hg > nginx-mail
comparison src/os/unix/ngx_linux_aio_read.c @ 665:0b460e61bdcd default tip
Merge with nginx 1.0.0.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:22:17 +0400 |
parents | c5122335e41d |
children |
comparison
equal
deleted
inserted
replaced
572:06419a2298a9 | 665:0b460e61bdcd |
---|---|
25 | 25 |
26 ssize_t | 26 ssize_t |
27 ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset, | 27 ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset, |
28 ngx_pool_t *pool) | 28 ngx_pool_t *pool) |
29 { | 29 { |
30 long n; | 30 long n; |
31 struct iocb *piocb[1]; | 31 struct iocb *piocb[1]; |
32 ngx_event_t *ev; | 32 ngx_event_t *ev; |
33 ngx_event_aio_t *aio; | 33 ngx_event_aio_t *aio; |
34 static ngx_uint_t enosys = 0; | |
35 | 34 |
36 if (enosys) { | 35 if (!ngx_file_aio) { |
37 return ngx_read_file(file, buf, size, offset); | 36 return ngx_read_file(file, buf, size, offset); |
38 } | 37 } |
39 | 38 |
40 aio = file->aio; | 39 aio = file->aio; |
41 | 40 |
94 piocb[0] = &aio->aiocb; | 93 piocb[0] = &aio->aiocb; |
95 | 94 |
96 n = io_submit(ngx_aio_ctx, 1, piocb); | 95 n = io_submit(ngx_aio_ctx, 1, piocb); |
97 | 96 |
98 if (n == 1) { | 97 if (n == 1) { |
98 ev->active = 1; | |
99 ev->ready = 0; | |
100 ev->complete = 0; | |
101 | |
99 return NGX_AGAIN; | 102 return NGX_AGAIN; |
100 } | 103 } |
101 | 104 |
102 n = -n; | 105 n = -n; |
103 | 106 |
107 | 110 |
108 ngx_log_error(NGX_LOG_CRIT, file->log, n, | 111 ngx_log_error(NGX_LOG_CRIT, file->log, n, |
109 "io_submit(\"%V\") failed", &file->name); | 112 "io_submit(\"%V\") failed", &file->name); |
110 | 113 |
111 if (n == NGX_ENOSYS) { | 114 if (n == NGX_ENOSYS) { |
112 enosys = 1; | 115 ngx_file_aio = 0; |
113 return ngx_read_file(file, buf, size, offset); | 116 return ngx_read_file(file, buf, size, offset); |
114 } | 117 } |
115 | 118 |
116 return NGX_ERROR; | 119 return NGX_ERROR; |
117 } | 120 } |