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 }