Mercurial > hg > nginx
comparison src/os/unix/ngx_files.c @ 6240:6fce16b1fc10
Writing to some file systems can be interrupted.
At least such behavior was observed with CephFS, see:
http://mailman.nginx.org/pipermail/nginx/2015-July/048188.html.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 02 Sep 2015 19:26:40 +0300 |
parents | 1fdba317ee6d |
children | 387696b36c29 |
comparison
equal
deleted
inserted
replaced
6239:281863981d0b | 6240:6fce16b1fc10 |
---|---|
262 ngx_pool_t *pool) | 262 ngx_pool_t *pool) |
263 { | 263 { |
264 u_char *prev; | 264 u_char *prev; |
265 size_t size; | 265 size_t size; |
266 ssize_t total, n; | 266 ssize_t total, n; |
267 ngx_err_t err; | |
267 ngx_array_t vec; | 268 ngx_array_t vec; |
268 struct iovec *iov, iovs[NGX_IOVS]; | 269 struct iovec *iov, iovs[NGX_IOVS]; |
269 | 270 |
270 /* use pwrite() if there is the only buf in a chain */ | 271 /* use pwrite() if there is the only buf in a chain */ |
271 | 272 |
333 } | 334 } |
334 | 335 |
335 file->sys_offset = offset; | 336 file->sys_offset = offset; |
336 } | 337 } |
337 | 338 |
339 eintr: | |
340 | |
338 n = writev(file->fd, vec.elts, vec.nelts); | 341 n = writev(file->fd, vec.elts, vec.nelts); |
339 | 342 |
340 if (n == -1) { | 343 if (n == -1) { |
341 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, | 344 err = ngx_errno; |
345 | |
346 if (err == NGX_EINTR) { | |
347 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, | |
348 "writev() was interrupted"); | |
349 goto eintr; | |
350 } | |
351 | |
352 ngx_log_error(NGX_LOG_CRIT, file->log, err, | |
342 "writev() \"%s\" failed", file->name.data); | 353 "writev() \"%s\" failed", file->name.data); |
343 return NGX_ERROR; | 354 return NGX_ERROR; |
344 } | 355 } |
345 | 356 |
346 if ((size_t) n != size) { | 357 if ((size_t) n != size) { |