nginx-0.3.10-RELEASE import

    *) Change: the "valid_referers" directive and the "$invalid_referer"
       variable were moved to the new ngx_http_referer_module from the
       ngx_http_rewrite_module.

    *) Change: the "$apache_bytes_sent" variable name was changed to
       "$body_bytes_sent".

    *) Feature: the "$sent_http_..." variables.

    *) Feature: the "if" directive supports the "=" and "!=" operations.

    *) Feature: the "proxy_pass" directive supports the HTTPS protocol.

    *) Feature: the "proxy_set_body" directive.

    *) Feature: the "post_action" directive.

    *) Feature: the ngx_http_empty_gif_module.

    *) Feature: the "worker_cpu_affinity" directive for Linux.

    *) Bugfix: the "rewrite" directive did not unescape URI part in
       redirect, now it is unescaped except the %00-%25 and %7F-%FF
       characters.

    *) Bugfix: nginx could not be built by the icc 9.0 compiler.

    *) Bugfix: if the SSI was enabled for zero size static file, then the
       chunked response was encoded incorrectly.
diff --git a/src/imap/ngx_imap_handler.c b/src/imap/ngx_imap_handler.c
index ac5db73..ddff96a 100644
--- a/src/imap/ngx_imap_handler.c
+++ b/src/imap/ngx_imap_handler.c
@@ -17,7 +17,6 @@
 
 #if (NGX_IMAP_SSL)
 static void ngx_imap_ssl_handshake_handler(ngx_connection_t *c);
-static void ngx_imap_ssl_close_handler(ngx_event_t *ev);
 #endif
 
 
@@ -58,7 +57,7 @@
     if (lctx == NULL) {
         ngx_imap_close_connection(c);
         return;
-    } 
+    }
 
     lctx->client = &c->addr_text;
     lctx->session = NULL;
@@ -106,7 +105,7 @@
 
 static void
 ngx_imap_ssl_handshake_handler(ngx_connection_t *c)
-{   
+{
     if (c->ssl->handshaked) {
         ngx_imap_init_session(c);
         return;
@@ -181,6 +180,7 @@
 
     if (wev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -246,6 +246,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -298,6 +299,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -498,6 +500,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -725,8 +728,7 @@
 
     if (c->ssl) {
         if (ngx_ssl_shutdown(c) == NGX_AGAIN) {
-            c->read->handler = ngx_imap_ssl_close_handler;
-            c->write->handler = ngx_imap_ssl_close_handler;
+            c->ssl->handler = ngx_imap_close_connection;
             return;
         }
     }
@@ -743,27 +745,6 @@
 }
 
 
-#if (NGX_IMAP_SSL)
- 
-static void
-ngx_imap_ssl_close_handler(ngx_event_t *ev)
-{
-    ngx_connection_t  *c;
-
-    c = ev->data;
-
-    ngx_log_debug0(NGX_LOG_DEBUG_IMAP, ev->log, 0, "http ssl close handler");
-
-    if (ngx_ssl_shutdown(c) == NGX_AGAIN) {
-        return;
-    }
-
-    ngx_imap_close_connection(c);
-}
-
-#endif
-
-
 static u_char *
 ngx_imap_log_error(ngx_log_t *log, u_char *buf, size_t len)
 {
@@ -776,7 +757,7 @@
         len -= p - buf;
         buf = p;
     }
-    
+
     ctx = log->data;
 
     p = ngx_snprintf(buf, len, ", client: %V", ctx->client);