Mercurial > hg > nginx
view src/mail/ngx_mail_pop3_module.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_MAIL_POP3_MODULE_H_INCLUDED_ #define _NGX_MAIL_POP3_MODULE_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_mail.h> typedef struct { ngx_str_t capability; ngx_str_t starttls_capability; ngx_str_t starttls_only_capability; ngx_str_t auth_capability; ngx_uint_t auth_methods; ngx_array_t capabilities; } ngx_mail_pop3_srv_conf_t; void ngx_mail_pop3_init_session(ngx_mail_session_t *s, ngx_connection_t *c); void ngx_mail_pop3_init_protocol(ngx_event_t *rev); void ngx_mail_pop3_auth_state(ngx_event_t *rev); ngx_int_t ngx_mail_pop3_parse_command(ngx_mail_session_t *s); extern ngx_module_t ngx_mail_pop3_module; #endif /* _NGX_MAIL_POP3_MODULE_H_INCLUDED_ */