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 }