diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 4c42ffc..7b3daf2 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -951,40 +951,21 @@
      * before we clean the connection
      */
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
-    if (c->read->prev) {
-        ngx_delete_posted_event(c->read);
-    }
-
-    if (c->write->prev) {
-        ngx_delete_posted_event(c->write);
-    }
-
-    c->read->closed = 1;
-    c->write->closed = 1;
-
     ngx_unlock(&c->lock);
-    c->read->locked = 0;
-    c->write->locked = 0;
-
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
-#else
-
-    if (c->read->prev) {
-        ngx_delete_posted_event(c->read);
-    }
-
-    if (c->write->prev) {
-        ngx_delete_posted_event(c->write);
-    }
-
-    c->read->closed = 1;
-    c->write->closed = 1;
 
 #endif
 
+    if (c->read->prev) {
+        ngx_delete_posted_event(c->read);
+    }
+
+    if (c->write->prev) {
+        ngx_delete_posted_event(c->write);
+    }
+
+    c->read->closed = 1;
+    c->write->closed = 1;
+
     ngx_reusable_connection(c, 0);
 
     log_error = c->log_error;
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index 5f78978..a17793b 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -3082,17 +3082,6 @@
 
     c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
 
-#if (NGX_THREADS)
-
-    /* TODO: lock event when call completion handler */
-
-    rev->lock = &c->lock;
-    wev->lock = &c->lock;
-    rev->own_lock = &c->lock;
-    wev->own_lock = &c->lock;
-
-#endif
-
     ngx_log_debug3(NGX_LOG_DEBUG_EVENT, &uc->log, 0,
                    "connect to %V, fd:%d #%uA", &uc->server, s, c->number);
 
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 0506103..8f30225 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -404,8 +404,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for (i = 0; i < events; i++) {
 
         fd = event_list[i].fd;
@@ -495,19 +493,13 @@
         rev = c->read;
 
         if ((revents & POLLIN) && rev->active) {
-
-            if ((flags & NGX_POST_THREAD_EVENTS) && !rev->accept) {
-                rev->posted_ready = 1;
-
-            } else {
-                rev->ready = 1;
-            }
+            rev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                queue = (ngx_event_t **) (rev->accept ?
-                               &ngx_posted_accept_events : &ngx_posted_events);
+                queue = rev->accept ? &ngx_posted_accept_events
+                                    : &ngx_posted_events;
 
-                ngx_locked_post_event(rev, queue);
+                ngx_post_event(rev, queue);
 
             } else {
                 instance = rev->instance;
@@ -523,16 +515,10 @@
         wev = c->write;
 
         if ((revents & POLLOUT) && wev->active) {
-
-            if (flags & NGX_POST_THREAD_EVENTS) {
-                wev->posted_ready = 1;
-
-            } else {
-                wev->ready = 1;
-            }
+            wev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                ngx_locked_post_event(wev, &ngx_posted_events);
+                ngx_post_event(wev, &ngx_posted_events);
 
             } else {
                 wev->handler(wev);
@@ -540,8 +526,6 @@
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index a098c1c..309e918 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -612,8 +612,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for (i = 0; i < events; i++) {
         c = event_list[i].data.ptr;
 
@@ -674,18 +672,13 @@
             }
 #endif
 
-            if ((flags & NGX_POST_THREAD_EVENTS) && !rev->accept) {
-                rev->posted_ready = 1;
-
-            } else {
-                rev->ready = 1;
-            }
+            rev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                queue = (ngx_event_t **) (rev->accept ?
-                               &ngx_posted_accept_events : &ngx_posted_events);
+                queue = rev->accept ? &ngx_posted_accept_events
+                                    : &ngx_posted_events;
 
-                ngx_locked_post_event(rev, queue);
+                ngx_post_event(rev, queue);
 
             } else {
                 rev->handler(rev);
@@ -708,15 +701,10 @@
                 continue;
             }
 
-            if (flags & NGX_POST_THREAD_EVENTS) {
-                wev->posted_ready = 1;
-
-            } else {
-                wev->ready = 1;
-            }
+            wev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                ngx_locked_post_event(wev, &ngx_posted_events);
+                ngx_post_event(wev, &ngx_posted_events);
 
             } else {
                 wev->handler(wev);
@@ -724,8 +712,6 @@
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_eventport_module.c b/src/event/modules/ngx_eventport_module.c
index 5f9cf4e..bba87ed 100644
--- a/src/event/modules/ngx_eventport_module.c
+++ b/src/event/modules/ngx_eventport_module.c
@@ -466,8 +466,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for (i = 0; i < events; i++) {
 
         if (event_list[i].portev_source == PORT_SOURCE_TIMER) {
@@ -534,19 +532,13 @@
             wev->active = 0;
 
             if (revents & POLLIN) {
-
-                if ((flags & NGX_POST_THREAD_EVENTS) && !rev->accept) {
-                    rev->posted_ready = 1;
-
-                } else {
-                    rev->ready = 1;
-                }
+                rev->ready = 1;
 
                 if (flags & NGX_POST_EVENTS) {
-                    queue = (ngx_event_t **) (rev->accept ?
-                               &ngx_posted_accept_events : &ngx_posted_events);
+                    queue = rev->accept ? &ngx_posted_accept_events
+                                        : &ngx_posted_events;
 
-                    ngx_locked_post_event(rev, queue);
+                    ngx_post_event(rev, queue);
 
                 } else {
                     rev->handler(rev);
@@ -574,16 +566,10 @@
             }
 
             if (revents & POLLOUT) {
-
-                if (flags & NGX_POST_THREAD_EVENTS) {
-                    wev->posted_ready = 1;
-
-                } else {
-                    wev->ready = 1;
-                }
+                wev->ready = 1;
 
                 if (flags & NGX_POST_EVENTS) {
-                    ngx_locked_post_event(wev, &ngx_posted_events);
+                    ngx_post_event(wev, &ngx_posted_events);
 
                 } else {
                     wev->handler(wev);
@@ -600,8 +586,6 @@
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 30e456c..9e41d3e 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -573,8 +573,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for (i = 0; i < events; i++) {
 
         ngx_kqueue_dump_event(cycle->log, &event_list[i]);
@@ -626,24 +624,6 @@
                 ev->active = 0;
             }
 
-#if (NGX_THREADS)
-
-            if ((flags & NGX_POST_THREAD_EVENTS) && !ev->accept) {
-                ev->posted_ready = 1;
-                ev->posted_available = event_list[i].data;
-
-                if (event_list[i].flags & EV_EOF) {
-                    ev->posted_eof = 1;
-                    ev->posted_errno = event_list[i].fflags;
-                }
-
-                ngx_locked_post_event(ev, &ngx_posted_events);
-
-                continue;
-            }
-
-#endif
-
             ev->available = event_list[i].data;
 
             if (event_list[i].flags & EV_EOF) {
@@ -674,9 +654,10 @@
         }
 
         if (flags & NGX_POST_EVENTS) {
-            queue = (ngx_event_t **) (ev->accept ? &ngx_posted_accept_events:
-                                                   &ngx_posted_events);
-            ngx_locked_post_event(ev, queue);
+            queue = ev->accept ? &ngx_posted_accept_events
+                               : &ngx_posted_events;
+
+            ngx_post_event(ev, queue);
 
             continue;
         }
@@ -684,8 +665,6 @@
         ev->handler(ev);
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     return NGX_OK;
 }
 
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 9db6b6c..f2fc749 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -297,8 +297,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for (i = 0; i < nevents && ready; i++) {
 
         revents = event_list[i].revents;
@@ -372,31 +370,21 @@
             found = 1;
 
             ev = c->read;
+            ev->ready = 1;
 
-            if ((flags & NGX_POST_THREAD_EVENTS) && !ev->accept) {
-                ev->posted_ready = 1;
+            queue = ev->accept ? &ngx_posted_accept_events
+                               : &ngx_posted_events;
 
-            } else {
-                ev->ready = 1;
-            }
-
-            queue = (ngx_event_t **) (ev->accept ? &ngx_posted_accept_events:
-                                                   &ngx_posted_events);
-            ngx_locked_post_event(ev, queue);
+            ngx_post_event(ev, queue);
         }
 
         if ((revents & POLLOUT) && c->write->active) {
             found = 1;
+
             ev = c->write;
+            ev->ready = 1;
 
-            if (flags & NGX_POST_THREAD_EVENTS) {
-                ev->posted_ready = 1;
-
-            } else {
-                ev->ready = 1;
-            }
-
-            ngx_locked_post_event(ev, &ngx_posted_events);
+            ngx_post_event(ev, &ngx_posted_events);
         }
 
         if (found) {
@@ -405,8 +393,6 @@
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     if (ready != 0) {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events");
     }
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index b36230c..66b2454 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -404,10 +404,10 @@
             rev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                queue = (ngx_event_t **) (rev->accept ?
-                               &ngx_posted_accept_events : &ngx_posted_events);
+                queue = rev->accept ? &ngx_posted_accept_events
+                                    : &ngx_posted_events;
 
-                ngx_locked_post_event(rev, queue);
+                ngx_post_event(rev, queue);
 
             } else {
                 rev->handler(rev);
@@ -421,7 +421,7 @@
             wev->ready = 1;
 
             if (flags & NGX_POST_EVENTS) {
-                ngx_locked_post_event(wev, &ngx_posted_events);
+                ngx_post_event(wev, &ngx_posted_events);
 
             } else {
                 wev->handler(wev);
@@ -554,8 +554,6 @@
             continue;
         }
 
-        ngx_mutex_lock(ngx_posted_events_mutex);
-
         for (i = 0; i < n; i++) {
             c = cycle->files[overflow_list[i].fd];
 
@@ -573,18 +571,13 @@
             {
                 tested++;
 
-                if ((flags & NGX_POST_THREAD_EVENTS) && !rev->accept) {
-                    rev->posted_ready = 1;
-
-                } else {
-                    rev->ready = 1;
-                }
+                rev->ready = 1;
 
                 if (flags & NGX_POST_EVENTS) {
-                    queue = (ngx_event_t **) (rev->accept ?
-                               &ngx_posted_accept_events : &ngx_posted_events);
+                    queue = rev->accept ? &ngx_posted_accept_events
+                                        : &ngx_posted_events;
 
-                    ngx_locked_post_event(rev, queue);
+                    ngx_post_event(rev, queue);
 
                 } else {
                     rev->handler(rev);
@@ -601,15 +594,10 @@
             {
                 tested++;
 
-                if (flags & NGX_POST_THREAD_EVENTS) {
-                    wev->posted_ready = 1;
-
-                } else {
-                    wev->ready = 1;
-                }
+                wev->ready = 1;
 
                 if (flags & NGX_POST_EVENTS) {
-                    ngx_locked_post_event(wev, &ngx_posted_events);
+                    ngx_post_event(wev, &ngx_posted_events);
 
                 } else {
                     wev->handler(wev);
@@ -617,8 +605,6 @@
             }
         }
 
-        ngx_mutex_unlock(ngx_posted_events_mutex);
-
         if (tested >= rtscf->overflow_test) {
 
             if (ngx_linux_rtsig_max) {
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index d8bd544..7a554fe 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -305,8 +305,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     nready = 0;
 
     for (i = 0; i < nevents; i++) {
@@ -332,16 +330,15 @@
         if (found) {
             ev->ready = 1;
 
-            queue = (ngx_event_t **) (ev->accept ? &ngx_posted_accept_events:
-                                                   &ngx_posted_events);
-            ngx_locked_post_event(ev, queue);
+            queue = ev->accept ? &ngx_posted_accept_events
+                               : &ngx_posted_events;
+
+            ngx_post_event(ev, queue);
 
             nready++;
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     if (ready != nready) {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
                       "select ready != events: %d:%d", ready, nready);
diff --git a/src/event/modules/ngx_win32_select_module.c b/src/event/modules/ngx_win32_select_module.c
index eb5382d..32ee78d 100644
--- a/src/event/modules/ngx_win32_select_module.c
+++ b/src/event/modules/ngx_win32_select_module.c
@@ -296,8 +296,6 @@
         return NGX_ERROR;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     nready = 0;
 
     for (i = 0; i < nevents; i++) {
@@ -323,16 +321,15 @@
         if (found) {
             ev->ready = 1;
 
-            queue = (ngx_event_t **) (ev->accept ? &ngx_posted_accept_events:
-                                                   &ngx_posted_events);
-            ngx_locked_post_event(ev, queue);
+            queue = ev->accept ? &ngx_posted_accept_events
+                               : &ngx_posted_events;
+
+            ngx_post_event(ev, queue);
 
             nready++;
         }
     }
 
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
     if (ready != nready) {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
                       "select ready != events: %d:%d", ready, nready);
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index e2857f0..8531ed7 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -268,12 +268,7 @@
                    "posted events %p", ngx_posted_events);
 
     if (ngx_posted_events) {
-        if (ngx_threaded) {
-            ngx_wakeup_worker_thread(cycle);
-
-        } else {
-            ngx_event_process_posted(cycle, &ngx_posted_events);
-        }
+        ngx_event_process_posted(cycle, &ngx_posted_events);
     }
 }
 
@@ -617,13 +612,6 @@
 
 #endif
 
-#if (NGX_THREADS)
-    ngx_posted_events_mutex = ngx_mutex_init(cycle->log, 0);
-    if (ngx_posted_events_mutex == NULL) {
-        return NGX_ERROR;
-    }
-#endif
-
     if (ngx_event_timer_init(cycle->log) == NGX_ERROR) {
         return NGX_ERROR;
     }
@@ -712,10 +700,6 @@
     for (i = 0; i < cycle->connection_n; i++) {
         rev[i].closed = 1;
         rev[i].instance = 1;
-#if (NGX_THREADS)
-        rev[i].lock = &c[i].lock;
-        rev[i].own_lock = &c[i].lock;
-#endif
     }
 
     cycle->write_events = ngx_alloc(sizeof(ngx_event_t) * cycle->connection_n,
@@ -727,10 +711,6 @@
     wev = cycle->write_events;
     for (i = 0; i < cycle->connection_n; i++) {
         wev[i].closed = 1;
-#if (NGX_THREADS)
-        wev[i].lock = &c[i].lock;
-        wev[i].own_lock = &c[i].lock;
-#endif
     }
 
     i = cycle->connection_n;
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 530c948..e9520b6 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -74,10 +74,6 @@
     /* the pending eof reported by kqueue, epoll or in aio chain operation */
     unsigned         pending_eof:1;
 
-#if !(NGX_THREADS)
-    unsigned         posted_ready:1;
-#endif
-
 #if (NGX_WIN32)
     /* setsockopt(SO_UPDATE_ACCEPT_CONTEXT) was successful */
     unsigned         accept_context_updated:1;
@@ -135,30 +131,6 @@
     unsigned         channel:1;
     unsigned         resolver:1;
 
-#if (NGX_THREADS)
-
-    unsigned         locked:1;
-
-    unsigned         posted_ready:1;
-    unsigned         posted_timedout:1;
-    unsigned         posted_eof:1;
-
-#if (NGX_HAVE_KQUEUE)
-    /* the pending errno reported by kqueue */
-    int              posted_errno;
-#endif
-
-#if (NGX_HAVE_KQUEUE) || (NGX_HAVE_IOCP)
-    int              posted_available;
-#else
-    unsigned         posted_available:1;
-#endif
-
-    ngx_atomic_t    *lock;
-    ngx_atomic_t    *own_lock;
-
-#endif
-
     /* the links of the posted queue */
     ngx_event_t     *next;
     ngx_event_t    **prev;
@@ -519,7 +491,6 @@
 
 #define NGX_UPDATE_TIME         1
 #define NGX_POST_EVENTS         2
-#define NGX_POST_THREAD_EVENTS  4
 
 
 extern sig_atomic_t           ngx_event_timer_alarm;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 575ee4b..6285baa 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -262,13 +262,6 @@
         (void) ngx_atomic_fetch_add(ngx_stat_handled, 1);
 #endif
 
-#if (NGX_THREADS)
-        rev->lock = &c->lock;
-        wev->lock = &c->lock;
-        rev->own_lock = &c->lock;
-        wev->own_lock = &c->lock;
-#endif
-
         if (ls->addr_ntop) {
             c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
             if (c->addr_text.data == NULL) {
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 5fcabcf..a09d2e5 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -104,17 +104,6 @@
 
     c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
 
-#if (NGX_THREADS)
-
-    /* TODO: lock event when call completion handler */
-
-    rev->lock = pc->lock;
-    wev->lock = pc->lock;
-    rev->own_lock = &c->lock;
-    wev->own_lock = &c->lock;
-
-#endif
-
     if (ngx_add_conn) {
         if (ngx_add_conn(c) == NGX_ERROR) {
             goto failed;
diff --git a/src/event/ngx_event_mutex.c b/src/event/ngx_event_mutex.c
index 2bdfd5b..98efbb0 100644
--- a/src/event/ngx_event_mutex.c
+++ b/src/event/ngx_event_mutex.c
@@ -62,7 +62,7 @@
         ev = m->events;
         m->events = ev->next;
 
-        ev->next = (ngx_event_t *) ngx_posted_events;
+        ev->next = ngx_posted_events;
         ngx_posted_events = ev;
     }
 
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index e548145..87e506d 100644
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -10,23 +10,18 @@
 #include <ngx_event.h>
 
 
-ngx_thread_volatile ngx_event_t  *ngx_posted_accept_events;
-ngx_thread_volatile ngx_event_t  *ngx_posted_events;
-
-#if (NGX_THREADS)
-ngx_mutex_t                      *ngx_posted_events_mutex;
-#endif
+ngx_event_t  *ngx_posted_accept_events;
+ngx_event_t  *ngx_posted_events;
 
 
 void
-ngx_event_process_posted(ngx_cycle_t *cycle,
-    ngx_thread_volatile ngx_event_t **posted)
+ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted)
 {
     ngx_event_t  *ev;
 
     for ( ;; ) {
 
-        ev = (ngx_event_t *) *posted;
+        ev = *posted;
 
         ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                       "posted event %p", ev);
@@ -40,134 +35,3 @@
         ev->handler(ev);
     }
 }
-
-
-#if (NGX_THREADS) && !(NGX_WIN32)
-
-void
-ngx_wakeup_worker_thread(ngx_cycle_t *cycle)
-{
-    ngx_int_t     i;
-#if 0
-    ngx_uint_t    busy;
-    ngx_event_t  *ev;
-
-    busy = 1;
-
-    if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
-        return;
-    }
-
-    for (ev = (ngx_event_t *) ngx_posted_events; ev; ev = ev->next) {
-        if (*(ev->lock) == 0) {
-            busy = 0;
-            break;
-        }
-    }
-
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
-    if (busy) {
-        return;
-    }
-#endif
-
-    for (i = 0; i < ngx_threads_n; i++) {
-        if (ngx_threads[i].state == NGX_THREAD_FREE) {
-            ngx_cond_signal(ngx_threads[i].cv);
-            return;
-        }
-    }
-}
-
-
-ngx_int_t
-ngx_event_thread_process_posted(ngx_cycle_t *cycle)
-{
-    ngx_event_t  *ev;
-
-    for ( ;; ) {
-
-        ev = (ngx_event_t *) ngx_posted_events;
-
-        for ( ;; ) {
-
-            ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                          "posted event %p", ev);
-
-            if (ev == NULL) {
-                return NGX_OK;
-            }
-
-            if (ngx_trylock(ev->lock) == 0) {
-
-                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                               "posted event %p is busy", ev);
-
-                ev = ev->next;
-                continue;
-            }
-
-            if (ev->lock != ev->own_lock) {
-                if (*(ev->own_lock)) {
-                    ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                             "the own lock of the posted event %p is busy", ev);
-                    ngx_unlock(ev->lock);
-                    ev = ev->next;
-                    continue;
-                }
-                *(ev->own_lock) = 1;
-            }
-
-            ngx_delete_posted_event(ev);
-
-            ev->locked = 1;
-
-            ev->ready |= ev->posted_ready;
-            ev->timedout |= ev->posted_timedout;
-            ev->pending_eof |= ev->posted_eof;
-#if (NGX_HAVE_KQUEUE)
-            ev->kq_errno |= ev->posted_errno;
-#endif
-            if (ev->posted_available) {
-                ev->available = ev->posted_available;
-            }
-
-            ev->posted_ready = 0;
-            ev->posted_timedout = 0;
-            ev->posted_eof = 0;
-#if (NGX_HAVE_KQUEUE)
-            ev->posted_errno = 0;
-#endif
-            ev->posted_available = 0;
-
-            ngx_mutex_unlock(ngx_posted_events_mutex);
-
-            ev->handler(ev);
-
-            ngx_mutex_lock(ngx_posted_events_mutex);
-
-            if (ev->locked) {
-                ngx_unlock(ev->lock);
-
-                if (ev->lock != ev->own_lock) {
-                    ngx_unlock(ev->own_lock);
-                }
-            }
-
-            ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                           "posted event %p is done", ev);
-
-            break;
-        }
-    }
-}
-
-#else
-
-void
-ngx_wakeup_worker_thread(ngx_cycle_t *cycle)
-{
-}
-
-#endif
diff --git a/src/event/ngx_event_posted.h b/src/event/ngx_event_posted.h
index abd2e26..c24fd4e 100644
--- a/src/event/ngx_event_posted.h
+++ b/src/event/ngx_event_posted.h
@@ -14,16 +14,11 @@
 #include <ngx_event.h>
 
 
-#if (NGX_THREADS)
-extern ngx_mutex_t  *ngx_posted_events_mutex;
-#endif
-
-
-#define ngx_locked_post_event(ev, queue)                                      \
+#define ngx_post_event(ev, queue)                                             \
                                                                               \
     if (ev->prev == NULL) {                                                   \
-        ev->next = (ngx_event_t *) *queue;                                    \
-        ev->prev = (ngx_event_t **) queue;                                    \
+        ev->next = *queue;                                                    \
+        ev->prev = queue;                                                     \
         *queue = ev;                                                          \
                                                                               \
         if (ev->next) {                                                       \
@@ -38,13 +33,6 @@
     }
 
 
-#define ngx_post_event(ev, queue)                                             \
-                                                                              \
-    ngx_mutex_lock(ngx_posted_events_mutex);                                  \
-    ngx_locked_post_event(ev, queue);                                         \
-    ngx_mutex_unlock(ngx_posted_events_mutex);
-
-
 #define ngx_delete_posted_event(ev)                                           \
                                                                               \
     *(ev->prev) = ev->next;                                                   \
@@ -59,17 +47,11 @@
 
 
 
-void ngx_event_process_posted(ngx_cycle_t *cycle,
-    ngx_thread_volatile ngx_event_t **posted);
-void ngx_wakeup_worker_thread(ngx_cycle_t *cycle);
-
-#if (NGX_THREADS)
-ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle);
-#endif
+void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted);
 
 
-extern ngx_thread_volatile ngx_event_t  *ngx_posted_accept_events;
-extern ngx_thread_volatile ngx_event_t  *ngx_posted_events;
+extern ngx_event_t  *ngx_posted_accept_events;
+extern ngx_event_t  *ngx_posted_events;
 
 
 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 177ac1c..1075586 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -98,24 +98,6 @@
         if ((ngx_msec_int_t) (node->key - ngx_current_msec) <= 0) {
             ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
 
-#if (NGX_THREADS)
-
-            if (ngx_threaded && ngx_trylock(ev->lock) == 0) {
-
-                /*
-                 * We cannot change the timer of the event that is being
-                 * handled by another thread.  And we cannot easy walk
-                 * the rbtree to find next expired timer so we exit the loop.
-                 * However, it should be a rare case when the event that is
-                 * being handled has an expired timer.
-                 */
-
-                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
-                               "event %p is busy in expire timers", ev);
-                break;
-            }
-#endif
-
             ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                            "event timer del: %d: %M",
                            ngx_event_ident(ev->data), ev->timer.key);
@@ -132,18 +114,6 @@
 
             ev->timer_set = 0;
 
-#if (NGX_THREADS)
-            if (ngx_threaded) {
-                ev->posted_timedout = 1;
-
-                ngx_post_event(ev, &ngx_posted_events);
-
-                ngx_unlock(ev->lock);
-
-                continue;
-            }
-#endif
-
             ev->timedout = 1;
 
             ev->handler(ev);
diff --git a/src/os/unix/ngx_channel.c b/src/os/unix/ngx_channel.c
index 8e90696..1efa066 100644
--- a/src/os/unix/ngx_channel.c
+++ b/src/os/unix/ngx_channel.c
@@ -216,13 +216,6 @@
     rev->log = cycle->log;
     wev->log = cycle->log;
 
-#if (NGX_THREADS)
-    rev->lock = &c->lock;
-    wev->lock = &c->lock;
-    rev->own_lock = &c->lock;
-    wev->own_lock = &c->lock;
-#endif
-
     rev->channel = 1;
     wev->channel = 1;
 
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 3205aa5..6c84ba8 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -1214,7 +1214,6 @@
             /* STUB */
             ngx_done_events(cycle);
             ngx_mutex_destroy(ngx_event_timer_mutex);
-            ngx_mutex_destroy(ngx_posted_events_mutex);
 
             return;
         }
@@ -1265,20 +1264,18 @@
         return (ngx_thread_value_t) 1;
     }
 
-    ngx_mutex_lock(ngx_posted_events_mutex);
-
     for ( ;; ) {
         thr->state = NGX_THREAD_FREE;
 
+#if 0
         if (ngx_cond_wait(thr->cv, ngx_posted_events_mutex) == NGX_ERROR) {
             return (ngx_thread_value_t) 1;
         }
+#endif
 
         if (ngx_terminate) {
             thr->state = NGX_THREAD_EXIT;
 
-            ngx_mutex_unlock(ngx_posted_events_mutex);
-
             ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
                            "thread " NGX_TID_T_FMT " is done",
                            ngx_thread_self());
@@ -1288,6 +1285,7 @@
 
         thr->state = NGX_THREAD_BUSY;
 
+#if 0
         if (ngx_event_thread_process_posted(cycle) == NGX_ERROR) {
             return (ngx_thread_value_t) 1;
         }
@@ -1295,6 +1293,7 @@
         if (ngx_event_thread_process_posted(cycle) == NGX_ERROR) {
             return (ngx_thread_value_t) 1;
         }
+#endif
 
         if (ngx_process_changes) {
             if (ngx_process_changes(cycle, 1) == NGX_ERROR) {
