changeset 6126:adba26ff70b5

Removed the obsolete rtsig module.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 23 Apr 2015 14:17:40 +0300
parents 4dc8e7b62216
children 967594ba7571
files auto/modules auto/options auto/os/linux auto/sources src/core/ngx_connection.c src/core/ngx_resolver.c src/event/modules/ngx_rtsig_module.c src/event/ngx_event.c src/event/ngx_event.h src/event/ngx_event_accept.c src/http/ngx_http_request.c src/os/unix/ngx_linux.h src/os/unix/ngx_linux_config.h src/os/unix/ngx_linux_init.c
diffstat 14 files changed, 28 insertions(+), 915 deletions(-) [+]
line wrap: on
line diff
--- a/auto/modules
+++ b/auto/modules
@@ -49,13 +49,6 @@ if [ $NGX_TEST_BUILD_EPOLL = YES ]; then
     CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
 fi
 
-if [ $NGX_TEST_BUILD_RTSIG = YES ]; then
-    have=NGX_HAVE_RTSIG . auto/have
-    have=NGX_TEST_BUILD_RTSIG . auto/have
-    EVENT_MODULES="$EVENT_MODULES $RTSIG_MODULE"
-    CORE_SRCS="$CORE_SRCS $RTSIG_SRCS"
-fi
-
 if [ $NGX_TEST_BUILD_SOLARIS_SENDFILEV = YES ]; then
     have=NGX_TEST_BUILD_SOLARIS_SENDFILEV . auto/have
     CORE_SRCS="$CORE_SRCS $SOLARIS_SENDFILEV_SRCS"
--- a/auto/options
+++ b/auto/options
@@ -30,7 +30,6 @@ NGX_RPATH=NO
 NGX_TEST_BUILD_DEVPOLL=NO
 NGX_TEST_BUILD_EVENTPORT=NO
 NGX_TEST_BUILD_EPOLL=NO
-NGX_TEST_BUILD_RTSIG=NO
 NGX_TEST_BUILD_SOLARIS_SENDFILEV=NO
 
 NGX_PLATFORM=
@@ -38,7 +37,6 @@ NGX_WINE=
 
 EVENT_FOUND=NO
 
-EVENT_RTSIG=NO
 EVENT_SELECT=NO
 EVENT_POLL=NO
 
@@ -189,7 +187,6 @@ do
         --build=*)                       NGX_BUILD="$value"         ;;
         --builddir=*)                    NGX_OBJS="$value"          ;;
 
-        --with-rtsig_module)             EVENT_RTSIG=YES            ;;
         --with-select_module)            EVENT_SELECT=YES           ;;
         --without-select_module)         EVENT_SELECT=NONE          ;;
         --with-poll_module)              EVENT_POLL=YES             ;;
@@ -327,7 +324,6 @@ use the \"--without-http_limit_conn_modu
         --test-build-devpoll)            NGX_TEST_BUILD_DEVPOLL=YES ;;
         --test-build-eventport)          NGX_TEST_BUILD_EVENTPORT=YES ;;
         --test-build-epoll)              NGX_TEST_BUILD_EPOLL=YES   ;;
-        --test-build-rtsig)              NGX_TEST_BUILD_RTSIG=YES   ;;
         --test-build-solaris-sendfilev)  NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;;
 
         *)
@@ -362,7 +358,6 @@ cat << END
   --build=NAME                       set build name
   --builddir=DIR                     set build directory
 
-  --with-rtsig_module                enable rtsig module
   --with-select_module               enable select module
   --without-select_module            disable select module
   --with-poll_module                 enable poll module
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -26,18 +26,6 @@ version=$((`uname -r \
 version=${version:-0}
 
 
-# enable the rt signals on Linux between 2.2.19 and 2.6.17
-
-if [ \( $version -ge 131603 -a $version -lt 132626 \) -o $EVENT_RTSIG = YES ]
-then
-    echo " + rt signals found"
-    have=NGX_HAVE_RTSIG . auto/have
-    EVENT_MODULES="$EVENT_MODULES $RTSIG_MODULE"
-    CORE_SRCS="$CORE_SRCS $RTSIG_SRCS"
-    EVENT_FOUND=YES
-fi
-
-
 # posix_fadvise64() had been implemented in 2.5.60
 
 if [ $version -lt 132412 ]; then
--- a/auto/sources
+++ b/auto/sources
@@ -124,9 +124,6 @@ EVENTPORT_SRCS=src/event/modules/ngx_eve
 EPOLL_MODULE=ngx_epoll_module
 EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
 
-RTSIG_MODULE=ngx_rtsig_module
-RTSIG_SRCS=src/event/modules/ngx_rtsig_module.c
-
 IOCP_MODULE=ngx_iocp_module
 IOCP_SRCS=src/event/modules/ngx_iocp_module.c
 
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -764,10 +764,7 @@ ngx_close_listening_sockets(ngx_cycle_t 
 
         if (c) {
             if (c->read->active) {
-                if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
-                    ngx_del_conn(c, NGX_CLOSE_EVENT);
-
-                } else if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
+                if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
 
                     /*
                      * it seems that Linux-2.6.x OpenVZ sends events
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -3104,23 +3104,13 @@ ngx_udp_connect(ngx_udp_connection_t *uc
     /* UDP sockets are always ready to write */
     wev->ready = 1;
 
-    if (ngx_add_event) {
-
-        event = (ngx_event_flags & NGX_USE_CLEAR_EVENT) ?
-                    /* kqueue, epoll */                 NGX_CLEAR_EVENT:
-                    /* select, poll, /dev/poll */       NGX_LEVEL_EVENT;
-                    /* eventport event type has no meaning: oneshot only */
-
-        if (ngx_add_event(rev, NGX_READ_EVENT, event) != NGX_OK) {
-            goto failed;
-        }
-
-    } else {
-        /* rtsig */
-
-        if (ngx_add_conn(c) == NGX_ERROR) {
-            goto failed;
-        }
+    event = (ngx_event_flags & NGX_USE_CLEAR_EVENT) ?
+                /* kqueue, epoll */                 NGX_CLEAR_EVENT:
+                /* select, poll, /dev/poll */       NGX_LEVEL_EVENT;
+                /* eventport event type has no meaning: oneshot only */
+
+    if (ngx_add_event(rev, NGX_READ_EVENT, event) != NGX_OK) {
+        goto failed;
     }
 
     return NGX_OK;
deleted file mode 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ /dev/null
@@ -1,735 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- * Copyright (C) Nginx, Inc.
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_event.h>
-
-
-#if (NGX_TEST_BUILD_RTSIG)
-
-#if (NGX_DARWIN)
-
-#define SIGRTMIN       33
-#define si_fd          __pad[0]
-
-#else
-
-#ifdef  SIGRTMIN
-#define si_fd          _reason.__spare__.__spare2__[0]
-#else
-#define SIGRTMIN       33
-#define si_fd          __spare__[0]
-#endif
-
-#endif
-
-#define F_SETSIG       10
-#define KERN_RTSIGNR   30
-#define KERN_RTSIGMAX  31
-
-int sigtimedwait(const sigset_t *set, siginfo_t *info,
-                 const struct timespec *timeout);
-
-int sigtimedwait(const sigset_t *set, siginfo_t *info,
-                 const struct timespec *timeout)
-{
-    return -1;
-}
-
-int ngx_linux_rtsig_max;
-
-#endif
-
-
-typedef struct {
-    ngx_uint_t  signo;
-    ngx_uint_t  overflow_events;
-    ngx_uint_t  overflow_test;
-    ngx_uint_t  overflow_threshold;
-} ngx_rtsig_conf_t;
-
-
-extern ngx_event_module_t  ngx_poll_module_ctx;
-
-static ngx_int_t ngx_rtsig_init(ngx_cycle_t *cycle, ngx_msec_t timer);
-static void ngx_rtsig_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_rtsig_add_connection(ngx_connection_t *c);
-static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c,
-    ngx_uint_t flags);
-static ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle,
-    ngx_msec_t timer, ngx_uint_t flags);
-static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle,
-    ngx_msec_t timer, ngx_uint_t flags);
-
-static void *ngx_rtsig_create_conf(ngx_cycle_t *cycle);
-static char *ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf);
-static char *ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf,
-    void *post, void *data);
-
-
-static sigset_t        set;
-static ngx_uint_t      overflow, overflow_current;
-static struct pollfd  *overflow_list;
-
-
-static ngx_str_t      rtsig_name = ngx_string("rtsig");
-
-static ngx_conf_num_bounds_t  ngx_overflow_threshold_bounds = {
-    ngx_check_ngx_overflow_threshold_bounds, 2, 10
-};
-
-
-static ngx_command_t  ngx_rtsig_commands[] = {
-
-    { ngx_string("rtsig_signo"),
-      NGX_EVENT_CONF|NGX_CONF_TAKE1,
-      ngx_conf_set_num_slot,
-      0,
-      offsetof(ngx_rtsig_conf_t, signo),
-      NULL },
-
-    { ngx_string("rtsig_overflow_events"),
-      NGX_EVENT_CONF|NGX_CONF_TAKE1,
-      ngx_conf_set_num_slot,
-      0,
-      offsetof(ngx_rtsig_conf_t, overflow_events),
-      NULL },
-
-    { ngx_string("rtsig_overflow_test"),
-      NGX_EVENT_CONF|NGX_CONF_TAKE1,
-      ngx_conf_set_num_slot,
-      0,
-      offsetof(ngx_rtsig_conf_t, overflow_test),
-      NULL },
-
-    { ngx_string("rtsig_overflow_threshold"),
-      NGX_EVENT_CONF|NGX_CONF_TAKE1,
-      ngx_conf_set_num_slot,
-      0,
-      offsetof(ngx_rtsig_conf_t, overflow_threshold),
-      &ngx_overflow_threshold_bounds },
-
-      ngx_null_command
-};
-
-
-ngx_event_module_t  ngx_rtsig_module_ctx = {
-    &rtsig_name,
-    ngx_rtsig_create_conf,               /* create configuration */
-    ngx_rtsig_init_conf,                 /* init configuration */
-
-    {
-        NULL,                            /* add an event */
-        NULL,                            /* delete an event */
-        NULL,                            /* enable an event */
-        NULL,                            /* disable an event */
-        ngx_rtsig_add_connection,        /* add an connection */
-        ngx_rtsig_del_connection,        /* delete an connection */
-        NULL,                            /* trigger a notify */
-        ngx_rtsig_process_events,        /* process the events */
-        ngx_rtsig_init,                  /* init the events */
-        ngx_rtsig_done,                  /* done the events */
-    }
-
-};
-
-ngx_module_t  ngx_rtsig_module = {
-    NGX_MODULE_V1,
-    &ngx_rtsig_module_ctx,               /* module context */
-    ngx_rtsig_commands,                  /* module directives */
-    NGX_EVENT_MODULE,                    /* module type */
-    NULL,                                /* init master */
-    NULL,                                /* init module */
-    NULL,                                /* init process */
-    NULL,                                /* init thread */
-    NULL,                                /* exit thread */
-    NULL,                                /* exit process */
-    NULL,                                /* exit master */
-    NGX_MODULE_V1_PADDING
-};
-
-
-static ngx_int_t
-ngx_rtsig_init(ngx_cycle_t *cycle, ngx_msec_t timer)
-{
-    ngx_rtsig_conf_t  *rtscf;
-
-    rtscf = ngx_event_get_conf(cycle->conf_ctx, ngx_rtsig_module);
-
-    sigemptyset(&set);
-    sigaddset(&set, (int) rtscf->signo);
-    sigaddset(&set, (int) rtscf->signo + 1);
-    sigaddset(&set, SIGIO);
-    sigaddset(&set, SIGALRM);
-
-    if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
-        ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
-                      "sigprocmask() failed");
-        return NGX_ERROR;
-    }
-
-    if (overflow_list) {
-        ngx_free(overflow_list);
-    }
-
-    overflow_list = ngx_alloc(sizeof(struct pollfd) * rtscf->overflow_events,
-                              cycle->log);
-    if (overflow_list == NULL) {
-        return NGX_ERROR;
-    }
-
-    ngx_io = ngx_os_io;
-
-    ngx_event_actions = ngx_rtsig_module_ctx.actions;
-
-    ngx_event_flags = NGX_USE_RTSIG_EVENT
-                      |NGX_USE_GREEDY_EVENT
-                      |NGX_USE_FD_EVENT;
-
-    return NGX_OK;
-}
-
-
-static void
-ngx_rtsig_done(ngx_cycle_t *cycle)
-{
-    ngx_free(overflow_list);
-
-    overflow_list = NULL;
-}
-
-
-static ngx_int_t
-ngx_rtsig_add_connection(ngx_connection_t *c)
-{
-    ngx_uint_t         signo;
-    ngx_rtsig_conf_t  *rtscf;
-
-    if (c->read->accept && c->read->disabled) {
-
-        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
-                       "rtsig enable connection: fd:%d", c->fd);
-
-        if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
-            ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                          "fcntl(F_SETOWN) failed");
-            return NGX_ERROR;
-        }
-
-        c->read->active = 1;
-        c->read->disabled = 0;
-    }
-
-    rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
-
-    signo = rtscf->signo + c->read->instance;
-
-    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
-                   "rtsig add connection: fd:%d signo:%ui", c->fd, signo);
-
-    if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK|O_ASYNC) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                      "fcntl(O_RDWR|O_NONBLOCK|O_ASYNC) failed");
-        return NGX_ERROR;
-    }
-
-    if (fcntl(c->fd, F_SETSIG, (int) signo) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                      "fcntl(F_SETSIG) failed");
-        return NGX_ERROR;
-    }
-
-    if (fcntl(c->fd, F_SETOWN, ngx_pid) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                      "fcntl(F_SETOWN) failed");
-        return NGX_ERROR;
-    }
-
-#if (NGX_HAVE_ONESIGFD)
-    if (fcntl(c->fd, F_SETAUXFL, O_ONESIGFD) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                      "fcntl(F_SETAUXFL) failed");
-        return NGX_ERROR;
-    }
-#endif
-
-    c->read->active = 1;
-    c->write->active = 1;
-
-    return NGX_OK;
-}
-
-
-static ngx_int_t
-ngx_rtsig_del_connection(ngx_connection_t *c, ngx_uint_t flags)
-{
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
-                   "rtsig del connection: fd:%d", c->fd);
-
-    if ((flags & NGX_DISABLE_EVENT) && c->read->accept) {
-
-        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
-                       "rtsig disable connection: fd:%d", c->fd);
-
-        c->read->active = 0;
-        c->read->disabled = 1;
-        return NGX_OK;
-    }
-
-    if (flags & NGX_CLOSE_EVENT) {
-        c->read->active = 0;
-        c->write->active = 0;
-        return NGX_OK;
-    }
-
-    if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK) == -1) {
-        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
-                      "fcntl(O_RDWR|O_NONBLOCK) failed");
-        return NGX_ERROR;
-    }
-
-    c->read->active = 0;
-    c->write->active = 0;
-
-    return NGX_OK;
-}
-
-
-static ngx_int_t
-ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
-{
-    int                 signo;
-    ngx_int_t           instance;
-    ngx_err_t           err;
-    siginfo_t           si;
-    ngx_event_t        *rev, *wev;
-    ngx_queue_t        *queue;
-    struct timespec     ts, *tp;
-    struct sigaction    sa;
-    ngx_connection_t   *c;
-    ngx_rtsig_conf_t   *rtscf;
-
-    if (timer == NGX_TIMER_INFINITE) {
-        tp = NULL;
-
-    } else {
-        ts.tv_sec = timer / 1000;
-        ts.tv_nsec = (timer % 1000) * 1000000;
-        tp = &ts;
-    }
-
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                   "rtsig timer: %M", timer);
-
-    /* Linux's sigwaitinfo() is sigtimedwait() with the NULL timeout pointer */
-
-    signo = sigtimedwait(&set, &si, tp);
-
-    if (signo == -1) {
-        err = ngx_errno;
-
-        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, err,
-                       "rtsig signo:%d", signo);
-
-        if (flags & NGX_UPDATE_TIME) {
-            ngx_time_update();
-        }
-
-        if (err == NGX_EAGAIN) {
-
-            /* timeout */
-
-            if (timer != NGX_TIMER_INFINITE) {
-                return NGX_AGAIN;
-            }
-
-            ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
-                          "sigtimedwait() returned EAGAIN without timeout");
-            return NGX_ERROR;
-        }
-
-        ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
-                      cycle->log, err, "sigtimedwait() failed");
-        return NGX_ERROR;
-    }
-
-    ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                   "rtsig signo:%d fd:%d band:%04Xd",
-                   signo, si.si_fd, si.si_band);
-
-    if (flags & NGX_UPDATE_TIME) {
-        ngx_time_update();
-    }
-
-    rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
-
-    if (signo == (int) rtscf->signo || signo == (int) rtscf->signo + 1) {
-
-        if (overflow && (ngx_uint_t) si.si_fd > overflow_current) {
-            return NGX_OK;
-        }
-
-        c = ngx_cycle->files[si.si_fd];
-
-        if (c == NULL) {
-
-            /* the stale event */
-
-            return NGX_OK;
-        }
-
-        instance = signo - (int) rtscf->signo;
-
-        rev = c->read;
-
-        if (rev->instance != instance) {
-
-            /*
-             * the stale event from a file descriptor
-             * that was just closed in this iteration
-             */
-
-            ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                           "rtsig: stale event %p", c);
-
-            return NGX_OK;
-        }
-
-        if ((si.si_band & (POLLIN|POLLHUP|POLLERR)) && rev->active) {
-
-            rev->ready = 1;
-
-            if (flags & NGX_POST_EVENTS) {
-                queue = rev->accept ? &ngx_posted_accept_events
-                                    : &ngx_posted_events;
-
-                ngx_post_event(rev, queue);
-
-            } else {
-                rev->handler(rev);
-            }
-        }
-
-        wev = c->write;
-
-        if ((si.si_band & (POLLOUT|POLLHUP|POLLERR)) && wev->active) {
-
-            wev->ready = 1;
-
-            if (flags & NGX_POST_EVENTS) {
-                ngx_post_event(wev, &ngx_posted_events);
-
-            } else {
-                wev->handler(wev);
-            }
-        }
-
-        return NGX_OK;
-
-    } else if (signo == SIGALRM) {
-
-        ngx_time_update();
-
-        return NGX_OK;
-
-    } else if (signo == SIGIO) {
-
-        ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                      "rt signal queue overflowed");
-
-        /* flush the RT signal queue */
-
-        ngx_memzero(&sa, sizeof(struct sigaction));
-        sa.sa_handler = SIG_DFL;
-        sigemptyset(&sa.sa_mask);
-
-        if (sigaction(rtscf->signo, &sa, NULL) == -1) {
-            ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
-                          "sigaction(%d, SIG_DFL) failed", rtscf->signo);
-        }
-
-        if (sigaction(rtscf->signo + 1, &sa, NULL) == -1) {
-            ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
-                          "sigaction(%d, SIG_DFL) failed", rtscf->signo + 1);
-        }
-
-        overflow = 1;
-        overflow_current = 0;
-        ngx_event_actions.process_events = ngx_rtsig_process_overflow;
-
-        return NGX_ERROR;
-
-    }
-
-    ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                  "sigtimedwait() returned unexpected signal: %d", signo);
-
-    return NGX_ERROR;
-}
-
-
-static ngx_int_t
-ngx_rtsig_process_overflow(ngx_cycle_t *cycle, ngx_msec_t timer,
-    ngx_uint_t flags)
-{
-    int                name[2], rtsig_max, rtsig_nr, events, ready;
-    size_t             len;
-    ngx_err_t          err;
-    ngx_uint_t         tested, n, i;
-    ngx_event_t       *rev, *wev;
-    ngx_queue_t       *queue;
-    ngx_connection_t  *c;
-    ngx_rtsig_conf_t  *rtscf;
-
-    ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                   "rtsig process overflow");
-
-    rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
-
-    tested = 0;
-
-    for ( ;; ) {
-
-        n = 0;
-        while (n < rtscf->overflow_events) {
-
-            if (overflow_current == cycle->connection_n) {
-                break;
-            }
-
-            c = cycle->files[overflow_current++];
-
-            if (c == NULL || c->fd == -1) {
-                continue;
-            }
-
-            events = 0;
-
-            if (c->read->active && c->read->handler) {
-                events |= POLLIN;
-            }
-
-            if (c->write->active && c->write->handler) {
-                events |= POLLOUT;
-            }
-
-            if (events == 0) {
-                continue;
-            }
-
-            overflow_list[n].fd = c->fd;
-            overflow_list[n].events = events;
-            overflow_list[n].revents = 0;
-            n++;
-        }
-
-        if (n == 0) {
-            break;
-        }
-
-        for ( ;; ) {
-            ready = poll(overflow_list, n, 0);
-
-            ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                           "rtsig overflow poll:%d", ready);
-
-            if (ready == -1) {
-                err = ngx_errno;
-                ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
-                              cycle->log, 0,
-                              "poll() failed while the overflow recover");
-
-                if (err == NGX_EINTR) {
-                    continue;
-                }
-            }
-
-            break;
-        }
-
-        if (ready <= 0) {
-            continue;
-        }
-
-        for (i = 0; i < n; i++) {
-            c = cycle->files[overflow_list[i].fd];
-
-            if (c == NULL) {
-                continue;
-            }
-
-            rev = c->read;
-
-            if (rev->active
-                && !rev->closed
-                && rev->handler
-                && (overflow_list[i].revents
-                                          & (POLLIN|POLLERR|POLLHUP|POLLNVAL)))
-            {
-                tested++;
-
-                rev->ready = 1;
-
-                if (flags & NGX_POST_EVENTS) {
-                    queue = rev->accept ? &ngx_posted_accept_events
-                                        : &ngx_posted_events;
-
-                    ngx_post_event(rev, queue);
-
-                } else {
-                    rev->handler(rev);
-                }
-            }
-
-            wev = c->write;
-
-            if (wev->active
-                && !wev->closed
-                && wev->handler
-                && (overflow_list[i].revents
-                                         & (POLLOUT|POLLERR|POLLHUP|POLLNVAL)))
-            {
-                tested++;
-
-                wev->ready = 1;
-
-                if (flags & NGX_POST_EVENTS) {
-                    ngx_post_event(wev, &ngx_posted_events);
-
-                } else {
-                    wev->handler(wev);
-                }
-            }
-        }
-
-        if (tested >= rtscf->overflow_test) {
-
-            if (ngx_linux_rtsig_max) {
-
-                /*
-                 * Check the current rt queue length to prevent
-                 * the new overflow.
-                 *
-                 * learn the "/proc/sys/kernel/rtsig-max" value because
-                 * it can be changed since the last checking
-                 */
-
-                name[0] = CTL_KERN;
-                name[1] = KERN_RTSIGMAX;
-                len = sizeof(rtsig_max);
-
-                if (sysctl(name, 2, &rtsig_max, &len, NULL, 0) == -1) {
-                    ngx_log_error(NGX_LOG_ALERT, cycle->log, errno,
-                                  "sysctl(KERN_RTSIGMAX) failed");
-                    return NGX_ERROR;
-                }
-
-                /* name[0] = CTL_KERN; */
-                name[1] = KERN_RTSIGNR;
-                len = sizeof(rtsig_nr);
-
-                if (sysctl(name, 2, &rtsig_nr, &len, NULL, 0) == -1) {
-                    ngx_log_error(NGX_LOG_ALERT, cycle->log, errno,
-                                  "sysctl(KERN_RTSIGNR) failed");
-                    return NGX_ERROR;
-                }
-
-                /*
-                 * drain the rt signal queue if the /"proc/sys/kernel/rtsig-nr"
-                 * is bigger than
-                 *    "/proc/sys/kernel/rtsig-max" / "rtsig_overflow_threshold"
-                 */
-
-                if (rtsig_max / (int) rtscf->overflow_threshold < rtsig_nr) {
-                    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                                   "rtsig queue state: %d/%d",
-                                   rtsig_nr, rtsig_max);
-                    while (ngx_rtsig_process_events(cycle, 0, flags) == NGX_OK)
-                    {
-                        /* void */
-                    }
-                }
-
-            } else {
-
-                /*
-                 * Linux has not KERN_RTSIGMAX since 2.6.6-mm2
-                 * so drain the rt signal queue unconditionally
-                 */
-
-                while (ngx_rtsig_process_events(cycle, 0, flags) == NGX_OK) {
-                    /* void */
-                }
-            }
-
-            tested = 0;
-        }
-    }
-
-    if (flags & NGX_UPDATE_TIME) {
-        ngx_time_update();
-    }
-
-    ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                  "rt signal queue overflow recovered");
-
-    overflow = 0;
-    ngx_event_actions.process_events = ngx_rtsig_process_events;
-
-    return NGX_OK;
-}
-
-
-static void *
-ngx_rtsig_create_conf(ngx_cycle_t *cycle)
-{
-    ngx_rtsig_conf_t  *rtscf;
-
-    rtscf = ngx_palloc(cycle->pool, sizeof(ngx_rtsig_conf_t));
-    if (rtscf == NULL) {
-        return NULL;
-    }
-
-    rtscf->signo = NGX_CONF_UNSET;
-    rtscf->overflow_events = NGX_CONF_UNSET;
-    rtscf->overflow_test = NGX_CONF_UNSET;
-    rtscf->overflow_threshold = NGX_CONF_UNSET;
-
-    return rtscf;
-}
-
-
-static char *
-ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf)
-{
-    ngx_rtsig_conf_t  *rtscf = conf;
-
-    /* LinuxThreads use the first 3 RT signals */
-    ngx_conf_init_uint_value(rtscf->signo, SIGRTMIN + 10);
-
-    ngx_conf_init_uint_value(rtscf->overflow_events, 16);
-    ngx_conf_init_uint_value(rtscf->overflow_test, 32);
-    ngx_conf_init_uint_value(rtscf->overflow_threshold, 10);
-
-    return NGX_CONF_OK;
-}
-
-
-static char *
-ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf, void *post, void *data)
-{
-    if (ngx_linux_rtsig_max) {
-        return ngx_conf_check_num_bounds(cf, post, data);
-    }
-
-    ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
-                       "\"rtsig_overflow_threshold\" is not supported "
-                       "since Linux 2.6.6-mm2, ignored");
-
-    return NGX_CONF_OK;
-}
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -17,7 +17,6 @@ extern ngx_module_t ngx_kqueue_module;
 extern ngx_module_t ngx_eventport_module;
 extern ngx_module_t ngx_devpoll_module;
 extern ngx_module_t ngx_epoll_module;
-extern ngx_module_t ngx_rtsig_module;
 extern ngx_module_t ngx_select_module;
 
 
@@ -330,7 +329,7 @@ ngx_handle_read_event(ngx_event_t *rev, 
         }
     }
 
-    /* iocp, rtsig */
+    /* iocp */
 
     return NGX_OK;
 }
@@ -409,7 +408,7 @@ ngx_handle_write_event(ngx_event_t *wev,
         }
     }
 
-    /* iocp, rtsig */
+    /* iocp */
 
     return NGX_OK;
 }
@@ -817,15 +816,8 @@ ngx_event_process_init(ngx_cycle_t *cycl
             continue;
         }
 
-        if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
-            if (ngx_add_conn(c) == NGX_ERROR) {
-                return NGX_ERROR;
-            }
-
-        } else {
-            if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) {
-                return NGX_ERROR;
-            }
+        if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) {
+            return NGX_ERROR;
         }
 
 #endif
@@ -1191,10 +1183,6 @@ ngx_event_core_init_conf(ngx_cycle_t *cy
 #if (NGX_HAVE_EPOLL) && !(NGX_TEST_BUILD_EPOLL)
     int                  fd;
 #endif
-#if (NGX_HAVE_RTSIG)
-    ngx_uint_t           rtsig;
-    ngx_core_conf_t     *ccf;
-#endif
     ngx_int_t            i;
     ngx_module_t        *module;
     ngx_event_module_t  *event_module;
@@ -1215,18 +1203,6 @@ ngx_event_core_init_conf(ngx_cycle_t *cy
 
 #endif
 
-#if (NGX_HAVE_RTSIG)
-
-    if (module == NULL) {
-        module = &ngx_rtsig_module;
-        rtsig = 1;
-
-    } else {
-        rtsig = 0;
-    }
-
-#endif
-
 #if (NGX_HAVE_DEVPOLL)
 
     module = &ngx_devpoll_module;
@@ -1283,31 +1259,5 @@ ngx_event_core_init_conf(ngx_cycle_t *cy
     ngx_conf_init_value(ecf->accept_mutex, 1);
     ngx_conf_init_msec_value(ecf->accept_mutex_delay, 500);
 
-
-#if (NGX_HAVE_RTSIG)
-
-    if (!rtsig) {
-        return NGX_CONF_OK;
-    }
-
-    if (ecf->accept_mutex) {
-        return NGX_CONF_OK;
-    }
-
-    ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
-
-    if (ccf->worker_processes == 0) {
-        return NGX_CONF_OK;
-    }
-
-    ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
-                  "the \"rtsig\" method requires \"accept_mutex\" to be on");
-
-    return NGX_CONF_ERROR;
-
-#else
-
     return NGX_CONF_OK;
-
-#endif
 }
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -34,7 +34,7 @@ struct ngx_event_s {
 
     unsigned         accept:1;
 
-    /* used to detect the stale events in kqueue, rtsig, and epoll */
+    /* used to detect the stale events in kqueue and epoll */
     unsigned         instance:1;
 
     /*
@@ -230,7 +230,7 @@ extern ngx_event_actions_t   ngx_event_a
 #define NGX_USE_LOWAT_EVENT      0x00000010
 
 /*
- * The event filter requires to do i/o operation until EAGAIN: epoll, rtsig.
+ * The event filter requires to do i/o operation until EAGAIN: epoll.
  */
 #define NGX_USE_GREEDY_EVENT     0x00000020
 
@@ -240,7 +240,7 @@ extern ngx_event_actions_t   ngx_event_a
 #define NGX_USE_EPOLL_EVENT      0x00000040
 
 /*
- * No need to add or delete the event filters: rtsig.
+ * Obsolete.
  */
 #define NGX_USE_RTSIG_EVENT      0x00000080
 
@@ -256,7 +256,7 @@ extern ngx_event_actions_t   ngx_event_a
 
 /*
  * The event filter has no opaque data and requires file descriptors table:
- * poll, /dev/poll, rtsig.
+ * poll, /dev/poll.
  */
 #define NGX_USE_FD_EVENT         0x00000400
 
@@ -281,7 +281,7 @@ extern ngx_event_actions_t   ngx_event_a
 /*
  * The event filter is deleted just before the closing file.
  * Has no meaning for select and poll.
- * kqueue, epoll, rtsig, eventport:  allows to avoid explicit delete,
+ * kqueue, epoll, eventport:         allows to avoid explicit delete,
  *                                   because filter automatically is deleted
  *                                   on file close,
  *
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -42,10 +42,7 @@ ngx_event_accept(ngx_event_t *ev)
 
     ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module);
 
-    if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
-        ev->available = 1;
-
-    } else if (!(ngx_event_flags & NGX_USE_KQUEUE_EVENT)) {
+    if (!(ngx_event_flags & NGX_USE_KQUEUE_EVENT)) {
         ev->available = ecf->multi_accept;
     }
 
@@ -189,7 +186,7 @@ ngx_event_accept(ngx_event_t *ev)
             }
 
         } else {
-            if (!(ngx_event_flags & (NGX_USE_IOCP_EVENT|NGX_USE_RTSIG_EVENT))) {
+            if (!(ngx_event_flags & NGX_USE_IOCP_EVENT)) {
                 if (ngx_nonblocking(s) == -1) {
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_nonblocking_n " failed");
@@ -232,7 +229,7 @@ ngx_event_accept(ngx_event_t *ev)
 
         wev->ready = 1;
 
-        if (ngx_event_flags & (NGX_USE_IOCP_EVENT|NGX_USE_RTSIG_EVENT)) {
+        if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
             rev->ready = 1;
         }
 
@@ -374,10 +371,7 @@ ngx_trylock_accept_mutex(ngx_cycle_t *cy
         ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                        "accept mutex locked");
 
-        if (ngx_accept_mutex_held
-            && ngx_accept_events == 0
-            && !(ngx_event_flags & NGX_USE_RTSIG_EVENT))
-        {
+        if (ngx_accept_mutex_held && ngx_accept_events == 0) {
             return NGX_OK;
         }
 
@@ -423,16 +417,8 @@ ngx_enable_accept_events(ngx_cycle_t *cy
             continue;
         }
 
-        if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
-
-            if (ngx_add_conn(c) == NGX_ERROR) {
-                return NGX_ERROR;
-            }
-
-        } else {
-            if (ngx_add_event(c->read, NGX_READ_EVENT, 0) == NGX_ERROR) {
-                return NGX_ERROR;
-            }
+        if (ngx_add_event(c->read, NGX_READ_EVENT, 0) == NGX_ERROR) {
+            return NGX_ERROR;
         }
     }
 
@@ -456,17 +442,10 @@ ngx_disable_accept_events(ngx_cycle_t *c
             continue;
         }
 
-        if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
-            if (ngx_del_conn(c, NGX_DISABLE_EVENT) == NGX_ERROR) {
-                return NGX_ERROR;
-            }
-
-        } else {
-            if (ngx_del_event(c->read, NGX_READ_EVENT, NGX_DISABLE_EVENT)
-                == NGX_ERROR)
-            {
-                return NGX_ERROR;
-            }
+        if (ngx_del_event(c->read, NGX_READ_EVENT, NGX_DISABLE_EVENT)
+            == NGX_ERROR)
+        {
+            return NGX_ERROR;
         }
     }
 
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -349,7 +349,7 @@ ngx_http_init_connection(ngx_connection_
     }
 
     if (rev->ready) {
-        /* the deferred accept(), rtsig, iocp */
+        /* the deferred accept(), iocp */
 
         if (ngx_use_accept_mutex) {
             ngx_post_event(rev, &ngx_posted_events);
--- a/src/os/unix/ngx_linux.h
+++ b/src/os/unix/ngx_linux.h
@@ -12,7 +12,5 @@
 ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in,
     off_t limit);
 
-extern int ngx_linux_rtsig_max;
-
 
 #endif /* _NGX_LINUX_H_INCLUDED_ */
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -82,12 +82,6 @@ extern ssize_t sendfile(int s, int fd, i
 #endif
 
 
-#if (NGX_HAVE_RTSIG)
-#include <poll.h>
-#include <sys/sysctl.h>
-#endif
-
-
 #if (NGX_HAVE_EPOLL)
 #include <sys/epoll.h>
 #endif
--- a/src/os/unix/ngx_linux_init.c
+++ b/src/os/unix/ngx_linux_init.c
@@ -12,8 +12,6 @@
 u_char  ngx_linux_kern_ostype[50];
 u_char  ngx_linux_kern_osrelease[50];
 
-int     ngx_linux_rtsig_max;
-
 
 static ngx_os_io_t ngx_linux_io = {
     ngx_unix_recv,
@@ -46,32 +44,6 @@ ngx_os_specific_init(ngx_log_t *log)
     (void) ngx_cpystrn(ngx_linux_kern_osrelease, (u_char *) u.release,
                        sizeof(ngx_linux_kern_osrelease));
 
-#if (NGX_HAVE_RTSIG)
-    {
-    int        name[2];
-    size_t     len;
-    ngx_err_t  err;
-
-    name[0] = CTL_KERN;
-    name[1] = KERN_RTSIGMAX;
-    len = sizeof(ngx_linux_rtsig_max);
-
-    if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) {
-        err = ngx_errno;
-
-        if (err != NGX_ENOTDIR && err != NGX_ENOSYS) {
-            ngx_log_error(NGX_LOG_ALERT, log, err,
-                          "sysctl(KERN_RTSIGMAX) failed");
-
-            return NGX_ERROR;
-        }
-
-        ngx_linux_rtsig_max = 0;
-    }
-
-    }
-#endif
-
     ngx_os_io = ngx_linux_io;
 
     return NGX_OK;
@@ -83,9 +55,4 @@ ngx_os_specific_status(ngx_log_t *log)
 {
     ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
                   ngx_linux_kern_ostype, ngx_linux_kern_osrelease);
-
-#if (NGX_HAVE_RTSIG)
-    ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d",
-                  ngx_linux_rtsig_max);
-#endif
 }