Mercurial > hg > nginx-quic
view src/os/win32/ngx_time.h @ 6422:768e287a6f36
Fixed sendfile in threads (or with aio preload) and subrequests.
If sendfile in threads is used, it is possible that multiple
subrequests will trigger multiple ngx_linux_sendfile_thread() calls,
as operations are only serialized in output chain based on r->aio,
that is, on subrequest level.
This resulted in "task #N already active" alerts, in particular, when
running proxy_store.t with "aio threads; sendfile on;".
Fix is to tolerate duplicate calls, with an additional safety check
that the file is the same as previously used.
The same problem also affects "aio on; sendfile on;" on FreeBSD
(previously known as "aio sendfile;"), where aio->preload_handler()
could be called multiple times due to similar reasons, resulting in
"second aio post" alerts. Fix is the same as well.
It is also believed that similar problems can arise if a filter
calls the next body filter multiple times for some reason. These are
mostly theoretical though.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 03 Mar 2016 21:14:12 +0300 |
parents | d620f497c50f |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_TIME_H_INCLUDED_ #define _NGX_TIME_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef ngx_rbtree_key_t ngx_msec_t; typedef ngx_rbtree_key_int_t ngx_msec_int_t; typedef SYSTEMTIME ngx_tm_t; typedef FILETIME ngx_mtime_t; #define ngx_tm_sec wSecond #define ngx_tm_min wMinute #define ngx_tm_hour wHour #define ngx_tm_mday wDay #define ngx_tm_mon wMonth #define ngx_tm_year wYear #define ngx_tm_wday wDayOfWeek #define ngx_tm_sec_t u_short #define ngx_tm_min_t u_short #define ngx_tm_hour_t u_short #define ngx_tm_mday_t u_short #define ngx_tm_mon_t u_short #define ngx_tm_year_t u_short #define ngx_tm_wday_t u_short #define ngx_msleep Sleep #define NGX_HAVE_GETTIMEZONE 1 #define ngx_timezone_update() ngx_int_t ngx_gettimezone(void); void ngx_libc_localtime(time_t s, struct tm *tm); void ngx_libc_gmtime(time_t s, struct tm *tm); void ngx_gettimeofday(struct timeval *tp); #endif /* _NGX_TIME_H_INCLUDED_ */