comparison src/os/unix/ngx_freebsd_sendfile_chain.c @ 3063:6f6d7ea70805

refactor EAGAIN/EINTR processing
author Igor Sysoev <igor@sysoev.ru>
date Sun, 30 Aug 2009 09:42:29 +0000
parents f69d1aab6a0f
children 113cd532b328
comparison
equal deleted inserted replaced
3062:aa720192937b 3063:6f6d7ea70805
265 file_size + header_size, &hdtr, &sent, 0); 265 file_size + header_size, &hdtr, &sent, 0);
266 266
267 if (rc == -1) { 267 if (rc == -1) {
268 err = ngx_errno; 268 err = ngx_errno;
269 269
270 if (err == NGX_EAGAIN || err == NGX_EINTR) { 270 switch (err) {
271 if (err == NGX_EINTR) { 271 case NGX_EAGAIN:
272 eintr = 1; 272 eagain = 1;
273 273 break;
274 } else { 274
275 eagain = 1; 275 case NGX_EINTR:
276 } 276 eintr = 1;
277 277 break;
278 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err, 278
279 "sendfile() sent only %O bytes", sent); 279 default:
280
281 } else {
282 wev->error = 1; 280 wev->error = 1;
283 (void) ngx_connection_error(c, err, "sendfile() failed"); 281 (void) ngx_connection_error(c, err, "sendfile() failed");
284 return NGX_CHAIN_ERROR; 282 return NGX_CHAIN_ERROR;
285 } 283 }
284
285 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
286 "sendfile() sent only %O bytes", sent);
286 } 287 }
287 288
288 /* 289 /*
289 * sendfile() in FreeBSD 3.x-4.x may return value >= 0 290 * sendfile() in FreeBSD 3.x-4.x may return value >= 0
290 * on success, although only 0 is documented 291 * on success, although only 0 is documented
316 "writev: %d of %uz", rc, header_size); 317 "writev: %d of %uz", rc, header_size);
317 318
318 if (rc == -1) { 319 if (rc == -1) {
319 err = ngx_errno; 320 err = ngx_errno;
320 321
321 if (err == NGX_EAGAIN || err == NGX_EINTR) { 322 switch (err) {
322 if (err == NGX_EINTR) { 323 case NGX_EAGAIN:
323 eintr = 1; 324 break;
324 } 325
325 326 case NGX_EINTR:
326 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, 327 eintr = 1;
327 "writev() not ready"); 328 break;
328 329
329 } else { 330 default:
330 wev->error = 1; 331 wev->error = 1;
331 ngx_connection_error(c, err, "writev() failed"); 332 ngx_connection_error(c, err, "writev() failed");
332 return NGX_CHAIN_ERROR; 333 return NGX_CHAIN_ERROR;
333 } 334 }
335
336 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
337 "writev() not ready");
334 } 338 }
335 339
336 sent = rc > 0 ? rc : 0; 340 sent = rc > 0 ? rc : 0;
337 } 341 }
338 342