]> granicus.if.org Git - apache/commitdiff
Minor refactoring: move the creation of the pollset and associated
authorBrian Pane <brianp@apache.org>
Sun, 13 Nov 2005 02:27:44 +0000 (02:27 +0000)
committerBrian Pane <brianp@apache.org>
Sun, 13 Nov 2005 02:27:44 +0000 (02:27 +0000)
data structures outside of the listener thread function.  The point
of this is to facilitate future experiments with different concurrency
models like Leader/Followers as potential alternatives to the current
Reactor design.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@332879 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/experimental/event/event.c

index c5393c1c2842929555e4d6371b4ed3d38881b1c1..eb5ab62aed45c573e977cee7453178c7b8ff8ed5 100644 (file)
@@ -765,6 +765,51 @@ static void dummy_signal_handler(int sig)
      */
 }
 
+static apr_status_t init_pollset(apr_pool_t *p)
+{
+    apr_status_t rv;
+    ap_listen_rec *lr;
+    listener_poll_type *pt;
+
+    rv = apr_thread_mutex_create(&timeout_mutex, APR_THREAD_MUTEX_DEFAULT, p);
+    if (rv != APR_SUCCESS) {
+        ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
+                     "creation of the timeout mutex failed.");
+        return rv;
+    }
+
+    APR_RING_INIT(&timeout_head, conn_state_t, timeout_list);
+    APR_RING_INIT(&keepalive_timeout_head, conn_state_t, timeout_list);
+
+    /* Create the main pollset */
+    rv = apr_pollset_create(&event_pollset,
+                            ap_threads_per_child,
+                            p, APR_POLLSET_THREADSAFE | APR_POLLSET_NOCOPY);
+    if (rv != APR_SUCCESS) {
+        ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
+                     "apr_pollset_create with Thread Safety failed.");
+        return rv;
+    }
+
+    for (lr = ap_listeners; lr != NULL; lr = lr->next) {
+        apr_pollfd_t *pfd = apr_palloc(p, sizeof(*pfd));
+        pt = apr_pcalloc(p, sizeof(*pt));
+        pfd->desc_type = APR_POLL_SOCKET;
+        pfd->desc.s = lr->sd;
+        pfd->reqevents = APR_POLLIN;
+
+        pt->type = PT_ACCEPT;
+        pt->baton = lr;
+
+        pfd->client_data = pt;
+
+        apr_socket_opt_set(pfd->desc.s, APR_SO_NONBLOCK, 1);
+        apr_pollset_add(event_pollset, pfd);
+    }
+
+    return APR_SUCCESS;
+}
+
 static apr_status_t push2worker(const apr_pollfd_t * pfd,
                                 apr_pollset_t * pollset)
 {
@@ -875,47 +920,15 @@ static void *listener_thread(apr_thread_t * thd, void *dummy)
      */
 #define TIMEOUT_FUDGE_FACTOR 100000
 
-    rc = apr_thread_mutex_create(&timeout_mutex, APR_THREAD_MUTEX_DEFAULT,
-                                 tpool);
-    if (rc != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rc, ap_server_conf,
-                     "creation of the timeout mutex failed.  Attempting to "
-                     "shutdown process gracefully");
-        signal_threads(ST_GRACEFUL);
-        return NULL;
-    }
-
-    APR_RING_INIT(&timeout_head, conn_state_t, timeout_list);
-    APR_RING_INIT(&keepalive_timeout_head, conn_state_t, timeout_list);
-
-    /* Create the main pollset */
-    rc = apr_pollset_create(&event_pollset,
-                            ap_threads_per_child,
-                            tpool, APR_POLLSET_THREADSAFE | APR_POLLSET_NOCOPY);
+    rc = init_pollset(tpool);
     if (rc != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_ERR, rc, ap_server_conf,
-                     "apr_pollset_create with Thread Safety failed. "
-                     "Attempting to shutdown process gracefully");
+                     "failed to initialize pollset, "
+                     "attempting to shutdown process gracefully");
         signal_threads(ST_GRACEFUL);
         return NULL;
     }
 
-    for (lr = ap_listeners; lr != NULL; lr = lr->next) {
-        apr_pollfd_t *pfd = apr_palloc(tpool, sizeof(*pfd));
-        pt = apr_pcalloc(tpool, sizeof(*pt));
-        pfd->desc_type = APR_POLL_SOCKET;
-        pfd->desc.s = lr->sd;
-        pfd->reqevents = APR_POLLIN;
-
-        pt->type = PT_ACCEPT;
-        pt->baton = lr;
-
-        pfd->client_data = pt;
-
-        apr_socket_opt_set(pfd->desc.s, APR_SO_NONBLOCK, 1);
-        apr_pollset_add(event_pollset, pfd);
-    }
-
     /* Unblock the signal used to wake this thread up, and set a handler for
      * it.
      */