Maxim Dounin
March 05, 2021 10:32AM
details: https://hg.nginx.org/nginx/rev/d84f13618277
branches:
changeset: 7791:d84f13618277
user: Maxim Dounin <mdounin@mdounin.ru>
date: Fri Mar 05 17:16:19 2021 +0300
description:
Mail: postponed session initialization under accept mutex.

Similarly to 40e8ce405859 in the stream module, this reduces the time
accept mutex is held. This also simplifies following changes to
introduce PROXY protocol support.

diffstat:

src/mail/ngx_mail.h | 1 +
src/mail/ngx_mail_handler.c | 29 ++++++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 1 deletions(-)

diffs (77 lines):

diff -r da0a85e91587 -r d84f13618277 src/mail/ngx_mail.h
--- a/src/mail/ngx_mail.h Fri Mar 05 17:16:17 2021 +0300
+++ b/src/mail/ngx_mail.h Fri Mar 05 17:16:19 2021 +0300
@@ -197,6 +197,7 @@ typedef struct {

ngx_uint_t mail_state;

+ unsigned ssl:1;
unsigned protocol:3;
unsigned blocked:1;
unsigned quit:1;
diff -r da0a85e91587 -r d84f13618277 src/mail/ngx_mail_handler.c
--- a/src/mail/ngx_mail_handler.c Fri Mar 05 17:16:17 2021 +0300
+++ b/src/mail/ngx_mail_handler.c Fri Mar 05 17:16:19 2021 +0300
@@ -11,6 +11,7 @@
#include <ngx_mail.h>


+static void ngx_mail_init_session_handler(ngx_event_t *rev);
static void ngx_mail_init_session(ngx_connection_t *c);

#if (NGX_MAIL_SSL)
@@ -26,6 +27,7 @@ ngx_mail_init_connection(ngx_connection_
{
size_t len;
ngx_uint_t i;
+ ngx_event_t *rev;
ngx_mail_port_t *port;
struct sockaddr *sa;
struct sockaddr_in *sin;
@@ -129,6 +131,10 @@ ngx_mail_init_connection(ngx_connection_
s->main_conf = addr_conf->ctx->main_conf;
s->srv_conf = addr_conf->ctx->srv_conf;

+#if (NGX_MAIL_SSL)
+ s->ssl = addr_conf->ssl;
+#endif
+
s->addr_text = &addr_conf->addr_text;

c->data = s;
@@ -159,13 +165,34 @@ ngx_mail_init_connection(ngx_connection_

c->log_error = NGX_ERROR_INFO;

+ rev = c->read;
+ rev->handler = ngx_mail_init_session_handler;
+
+ if (ngx_use_accept_mutex) {
+ ngx_post_event(rev, &ngx_posted_events);
+ return;
+ }
+
+ rev->handler(rev);
+}
+
+
+static void
+ngx_mail_init_session_handler(ngx_event_t *rev)
+{
+ ngx_connection_t *c;
+ ngx_mail_session_t *s;
+
+ c = rev->data;
+ s = c->data;
+
#if (NGX_MAIL_SSL)
{
ngx_mail_ssl_conf_t *sslcf;

sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module);

- if (sslcf->enable || addr_conf->ssl) {
+ if (sslcf->enable || s->ssl) {
c->log->action = "SSL handshaking";

ngx_mail_ssl_init_connection(&sslcf->ssl, c);
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Mail: postponed session initialization under accept mutex.

Maxim Dounin 166 March 05, 2021 10:32AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 248
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready