diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 028dfe7..836ffe2 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -61,7 +61,6 @@
 {
     ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0;
 
-#if 1
     if (nchanges > 0
         && ev->index < nchanges
         && change_list[ev->index].udata == ev)
@@ -75,7 +74,6 @@
 
         return NGX_OK;
     }
-#endif
 
     return ngx_kqueue_set_event(ev, event, EV_ADD | flags);
 }
@@ -140,10 +138,7 @@
     change_list[nchanges].data = 0;
     change_list[nchanges].udata = ev;
 
-#if 0
-    if (flags == EV_ADD)
-#endif
-        ev->index = nchanges;
+    ev->index = nchanges;
 
     nchanges++;
 
@@ -264,8 +259,10 @@
 {
     ngx_event_t *e;
 
-    ngx_log_debug(ev->log, "set timer: %d" _ timer);
-
+#if (NGX_DEBUG)
+    ngx_connection_t *c = (ngx_connection_t *) ev->data;
+    ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer);
+#endif
     ngx_assert((!ev->timer_next && !ev->timer_prev), return, ev->log,
                "timer already set");
 
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index bff4960..1b7867d 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -190,7 +190,7 @@
         }
     }
 
-    for (i = 0; ready; i++) {
+    for (i = 0; i < nevents && ready; i++) {
         c = &ngx_connections[event_list[i].fd];
 
         ngx_log_debug(log, "poll: fd:%d, ev:%d, rev:%d" _
@@ -245,6 +245,8 @@
         }
     }
 
+    ngx_assert((ready == 0), /* void */ ; , log, "poll ready != nevents");
+
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index c75c719..854e796 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -81,6 +81,12 @@
 
     ngx_log_debug(ev->log, "select fd:%d event:%d" _ c->fd _ event);
 
+    if (ev->index != NGX_INVALID_INDEX) {
+        ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
+                      "%d:%d is already set", c->fd, event);
+        return NGX_OK;
+    }
+
 #if (WIN32)
     if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
         || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
@@ -202,7 +208,7 @@
     for (i = 0; i < nevents; i++) {
         ev = event_index[i];
         c = (ngx_connection_t *) ev->data;
-        ngx_log_debug(log, "select: %d" _ c->fd);
+        ngx_log_debug(log, "select: %d:%d" _ c->fd _ ev->write);
     }
 #endif
 
@@ -305,6 +311,13 @@
 {
     ngx_event_t *e;
 
+#if (NGX_DEBUG)
+    ngx_connection_t *c = (ngx_connection_t *) ev->data;
+    ngx_log_debug(ev->log, "set timer: %d:%d" _ c->fd _ timer);
+#endif
+    ngx_assert((!ev->timer_next && !ev->timer_prev), return, ev->log,
+               "timer already set");
+
     for (e = timer_queue.timer_next;
          e != &timer_queue && timer > e->timer_delta;
          e = e->timer_next)
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index b91a72a..206fc14 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -116,6 +116,7 @@
         ngx_read_events[fd].data = &ngx_connections[fd];
         ngx_read_events[fd].event_handler = &ngx_event_accept;
         ngx_read_events[fd].listening = 1;
+        ev->index = NGX_INVALID_INDEX;
 
         ngx_read_events[fd].available = 0;
 
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 4575b03..98a351c 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -161,16 +161,23 @@
 
 static void ngx_inline ngx_del_timer(ngx_event_t *ev)
 {
-    if (ev->timer_prev)
+#if (NGX_DEBUG)
+    ngx_log_debug(ev->log, "del timer: %d" _ *(int *)(ev->data));
+#endif
+
+    if (ev->timer_prev) {
         ev->timer_prev->timer_next = ev->timer_next;
+    }
 
     if (ev->timer_next) {
+        ev->timer_next->timer_delta += ev->timer_delta;
         ev->timer_next->timer_prev = ev->timer_prev;
         ev->timer_next = NULL;
     }
 
-    if (ev->timer_prev)
+    if (ev->timer_prev) {
         ev->timer_prev = NULL;
+    }
 }
 
 
diff --git a/src/event/ngx_event_close.c b/src/event/ngx_event_close.c
index 66a3693..715a14b 100644
--- a/src/event/ngx_event_close.c
+++ b/src/event/ngx_event_close.c
@@ -18,6 +18,9 @@
 
     ngx_destroy_pool(c->pool);
 
+    ngx_del_timer(c->read);
+    ngx_del_timer(c->write);
+
     ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
     ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
 
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 9c2e21b..97bd009 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -33,6 +33,7 @@
 #else
     ngx_http_server.doc_root = "/home/is/dox/";
     ngx_http_server.doc_root = "/home/is/work/xml/site-1.0.0/html";
+    ngx_http_server.doc_root = "/spool/test/lperltk";
 #endif
     ngx_http_server.doc_root_len = strlen(ngx_http_server.doc_root) + 1;
 
diff --git a/src/http/ngx_http_core.c b/src/http/ngx_http_core.c
index 6d5d722..62e6eea 100644
--- a/src/http/ngx_http_core.c
+++ b/src/http/ngx_http_core.c
@@ -50,7 +50,7 @@
 
     r->connection->unexpected_eof = 0;
     r->lingering_close = 1;
-    r->keepalive = 1;
+    r->keepalive = 0;
 
 #if 1
     r->filter = NGX_HTTP_FILTER_NEED_IN_MEMORY;
diff --git a/src/http/ngx_http_event.c b/src/http/ngx_http_event.c
index bfb7005..ff06ec1 100644
--- a/src/http/ngx_http_event.c
+++ b/src/http/ngx_http_event.c
@@ -695,14 +695,16 @@
     ngx_del_timer(r->connection->read);
     ngx_add_timer(r->connection->read, r->server->lingering_timeout);
 
+    if (r->connection->read->blocked) {
+        if (ngx_add_event(r->connection->read, NGX_READ_EVENT,
 #if (HAVE_CLEAR_EVENT)
-    if (ngx_add_event(r->connection->read, NGX_READ_EVENT,
-                      NGX_CLEAR_EVENT) == NGX_ERROR) {
+                          NGX_CLEAR_EVENT) == NGX_ERROR)
 #else
-    if (ngx_add_event(r->connection->read, NGX_READ_EVENT,
-                      NGX_ONESHOT_EVENT) == NGX_ERROR) {
+                          NGX_ONESHOT_EVENT) == NGX_ERROR)
 #endif
-       return ngx_http_close_request(r);
+        {
+            return ngx_http_close_request(r);
+        }
     }
 
     if (ngx_shutdown_socket(r->connection->fd, NGX_WRITE_SHUTDOWN) == -1)
@@ -728,12 +730,14 @@
 
     ngx_log_debug(ev->log, "http lingering close handler");
 
-    if (ev->timedout)
-        return NGX_DONE;
+    if (ev->timedout) {
+        return ngx_http_close_request(r);
+    }
 
     timer = r->lingering_time - ngx_time();
-    if (timer <= 0)
-        return NGX_DONE;
+    if (timer <= 0) {
+        return ngx_http_close_request(r);
+    }
 
     if (r->discarded_buffer == NULL) {
         if (r->header_in->end - r->header_in->last.mem
@@ -743,22 +747,23 @@
         } else {
             ngx_test_null(r->discarded_buffer,
                           ngx_palloc(c->pool, r->server->discarded_buffer_size),
-                          NGX_ERROR);
+                          ngx_http_close_request(r));
         }
     }
 
     n = ngx_event_recv(c, r->discarded_buffer,
                        r->server->discarded_buffer_size);
 
-    if (n == NGX_ERROR)
-        return NGX_ERROR;
+    ngx_log_debug(ev->log, "lingering read: %d" _ n);
 
-    if (n == 0)
-        return NGX_DONE;
+    if (n == NGX_ERROR || n == 0) {
+        return ngx_http_close_request(r);
+    }
 
     timer *= 1000;
-    if (timer > r->server->lingering_timeout)
+    if (timer > r->server->lingering_timeout) {
         timer = r->server->lingering_timeout;
+    }
 
     ngx_del_timer(ev);
     ngx_add_timer(ev, timer);
