]> git.kaiwu.me - nginx.git/commitdiff
Mail: added missing event handling after blocking events.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 5 Mar 2021 14:16:16 +0000 (17:16 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 5 Mar 2021 14:16:16 +0000 (17:16 +0300)
As long as a read event is blocked (ignored), ngx_handle_read_event()
needs to be called to make sure no further notifications will be
triggered when using level-triggered event methods, such as select() or
poll().

src/mail/ngx_mail_imap_handler.c
src/mail/ngx_mail_pop3_handler.c
src/mail/ngx_mail_smtp_handler.c

index 3bf09ec3c9f3544e05a45af322d2e4fa721628a7..e31e4d0c80e64c955bc6c922e5633641cc528000 100644 (file)
@@ -123,6 +123,12 @@ ngx_mail_imap_auth_state(ngx_event_t *rev)
     if (s->out.len) {
         ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "imap send handler busy");
         s->blocked = 1;
+
+        if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
+            ngx_mail_close_connection(c);
+            return;
+        }
+
         return;
     }
 
index 9310c2750f44aaa4828be00aafd3c80ac4582dcf..019927d3d19f8ee10715744ee3a22d0c66536123 100644 (file)
@@ -138,6 +138,12 @@ ngx_mail_pop3_auth_state(ngx_event_t *rev)
     if (s->out.len) {
         ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "pop3 send handler busy");
         s->blocked = 1;
+
+        if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
+            ngx_mail_close_connection(c);
+            return;
+        }
+
         return;
     }
 
index f1017e0d89fc6fd66756ce125db03e722ec1ec12..dcf658eeff0ff85d76d39960d0ff413ffd9b0e56 100644 (file)
@@ -449,6 +449,12 @@ ngx_mail_smtp_auth_state(ngx_event_t *rev)
     if (s->out.len) {
         ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "smtp send handler busy");
         s->blocked = 1;
+
+        if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
+            ngx_mail_close_connection(c);
+            return;
+        }
+
         return;
     }