From 30b587effb2a59e5cbf887600d1b4e195aa35377 Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Sat, 27 Jan 2018 02:01:47 +0000 Subject: [PATCH] mpm_fdqueue: follow up to r1821624. Export ap_queue_*() fonctions, so that they are accessible from MPMs, but don't provide "mpm_fdqueue.h" in the API (include/). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1822366 13f79535-47bb-0310-9956-ffa450edef68 --- server/Makefile.in | 1 + server/mpm/event/event.c | 22 +++++++-------- server/mpm/worker/worker.c | 4 +-- server/mpm_fdqueue.c | 11 ++++---- server/mpm_fdqueue.h | 58 ++++++++++++++++++++------------------ 5 files changed, 51 insertions(+), 45 deletions(-) diff --git a/server/Makefile.in b/server/Makefile.in index 46fbd54d1d..00c3e55fd5 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -68,6 +68,7 @@ export_files: ( for dir in $(EXPORT_DIRS); do \ ls $$dir/*.h ; \ done; \ + echo "$(top_srcdir)/server/mpm_fdqueue.h"; \ for dir in $(EXPORT_DIRS_APR); do \ ls $$dir/ap[ru].h $$dir/ap[ru]_*.h 2>/dev/null; \ done; \ diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index fa36e44db1..fecaaf0d3d 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -845,7 +845,7 @@ static int start_lingering_close_blocking(event_conn_state_t *cs) if (ap_start_lingering_close(cs->c)) { notify_suspend(cs); apr_socket_close(csd); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); return 0; } @@ -888,7 +888,7 @@ static int start_lingering_close_blocking(event_conn_state_t *cs) ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf, APLOGNO(03092) "start_lingering_close: apr_pollset_add failure"); apr_socket_close(cs->pfd.desc.s); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); return 0; } apr_thread_mutex_unlock(timeout_mutex); @@ -929,7 +929,7 @@ static int stop_lingering_close(event_conn_state_t *cs) ap_log_error(APLOG_MARK, APLOG_TRACE4, 0, ap_server_conf, "socket reached timeout in lingering-close state"); abort_socket_nonblocking(csd); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); if (dying) ap_queue_interrupt_one(worker_queue); return 0; @@ -1020,7 +1020,7 @@ static void process_socket(apr_thread_t *thd, apr_pool_t * p, apr_socket_t * soc c = ap_run_create_connection(p, ap_server_conf, sock, conn_id, cs->sbh, cs->bucket_alloc); if (!c) { - ap_push_pool(worker_queue_info, p); + ap_queue_info_push_pool(worker_queue_info, p); return; } apr_atomic_inc32(&connection_count); @@ -1177,7 +1177,7 @@ read_request: "process_socket: apr_pollset_add failure for " "write completion"); apr_socket_close(cs->pfd.desc.s); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); } else { apr_thread_mutex_unlock(timeout_mutex); @@ -1228,7 +1228,7 @@ read_request: "process_socket: apr_pollset_add failure for " "keep alive"); apr_socket_close(cs->pfd.desc.s); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); return; } apr_thread_mutex_unlock(timeout_mutex); @@ -1300,7 +1300,7 @@ static void close_listeners(int *closed) /* wake up the main thread */ kill(ap_my_pid, SIGTERM); - ap_free_idle_pools(worker_queue_info); + ap_queue_info_free_idle_pools(worker_queue_info); ap_queue_interrupt_all(worker_queue); } } @@ -1428,7 +1428,7 @@ static apr_status_t push2worker(event_conn_state_t *cs, apr_socket_t *csd, abort_socket_nonblocking(csd); } if (ptrans) { - ap_push_pool(worker_queue_info, ptrans); + ap_queue_info_push_pool(worker_queue_info, ptrans); } signal_threads(ST_GRACEFUL); } @@ -1687,7 +1687,7 @@ static void process_lingering_close(event_conn_state_t *cs, const apr_pollfd_t * rv = apr_socket_close(csd); AP_DEBUG_ASSERT(rv == APR_SUCCESS); - ap_push_pool(worker_queue_info, cs->p); + ap_queue_info_push_pool(worker_queue_info, cs->p); if (dying) ap_queue_interrupt_one(worker_queue); } @@ -2049,7 +2049,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) void *csd = NULL; ap_listen_rec *lr = (ap_listen_rec *) pt->baton; apr_pool_t *ptrans; /* Pool for per-transaction stuff */ - ap_pop_pool(&ptrans, worker_queue_info); + ap_queue_info_pop_pool(worker_queue_info, &ptrans); if (ptrans == NULL) { /* create a new transaction pool for each accepted socket */ @@ -2104,7 +2104,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) } } else { - ap_push_pool(worker_queue_info, ptrans); + ap_queue_info_push_pool(worker_queue_info, ptrans); } } } /* if:else on pt->type */ diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index 340dff94cb..1d475c3d09 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -676,7 +676,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t *thd, void * dummy) if (!listener_may_exit) { /* the following pops a recycled ptrans pool off a stack */ - ap_pop_pool(&ptrans, worker_queue_info); + ap_queue_info_pop_pool(worker_queue_info, &ptrans); if (ptrans == NULL) { /* we can't use a recycled transaction pool this time. * create a new transaction pool */ @@ -743,7 +743,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t *thd, void * dummy) } ap_close_listeners_ex(my_bucket->listeners); - ap_free_idle_pools(worker_queue_info); + ap_queue_info_free_idle_pools(worker_queue_info); ap_queue_term(worker_queue); dying = 1; ap_scoreboard_image->parent[process_slot].quiescing = 1; diff --git a/server/mpm_fdqueue.c b/server/mpm_fdqueue.c index 3c0f064ebc..c9531878a9 100644 --- a/server/mpm_fdqueue.c +++ b/server/mpm_fdqueue.c @@ -107,7 +107,7 @@ apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info, { apr_status_t rv; - ap_push_pool(queue_info, pool_to_recycle); + ap_queue_info_push_pool(queue_info, pool_to_recycle); /* If other threads are waiting on a worker, wake one up */ if (apr_atomic_inc32(&queue_info->idlers) < zero_pt) { @@ -214,7 +214,7 @@ apr_uint32_t ap_queue_info_num_idlers(fd_queue_info_t *queue_info) return (val > zero_pt) ? val - zero_pt : 0; } -void ap_push_pool(fd_queue_info_t *queue_info, apr_pool_t *pool_to_recycle) +void ap_queue_info_push_pool(fd_queue_info_t *queue_info, apr_pool_t *pool_to_recycle) { struct recycled_pool *new_recycle; /* If we have been given a pool to recycle, atomically link @@ -249,7 +249,8 @@ void ap_push_pool(fd_queue_info_t *queue_info, apr_pool_t *pool_to_recycle) } } -void ap_pop_pool(apr_pool_t **recycled_pool, fd_queue_info_t *queue_info) +void ap_queue_info_pop_pool(fd_queue_info_t *queue_info, + apr_pool_t **recycled_pool) { /* Atomically pop a pool from the recycled list */ @@ -279,13 +280,13 @@ void ap_pop_pool(apr_pool_t **recycled_pool, fd_queue_info_t *queue_info) } } -void ap_free_idle_pools(fd_queue_info_t *queue_info) +void ap_queue_info_free_idle_pools(fd_queue_info_t *queue_info) { apr_pool_t *p; queue_info->max_recycled_pools = 0; for (;;) { - ap_pop_pool(&p, queue_info); + ap_queue_info_pop_pool(queue_info, &p); if (p == NULL) break; apr_pool_destroy(p); diff --git a/server/mpm_fdqueue.h b/server/mpm_fdqueue.h index a4910f4243..9aeedde30d 100644 --- a/server/mpm_fdqueue.h +++ b/server/mpm_fdqueue.h @@ -45,18 +45,22 @@ struct fd_queue_elem_t; /* opaque */ typedef struct fd_queue_info_t fd_queue_info_t; typedef struct fd_queue_elem_t fd_queue_elem_t; -apr_status_t ap_queue_info_create(fd_queue_info_t **queue_info, - apr_pool_t *pool, int max_idlers, - int max_recycled_pools); -apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info, - apr_pool_t *pool_to_recycle); -apr_status_t ap_queue_info_try_get_idler(fd_queue_info_t *queue_info); -apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info, - int *had_to_block); -apr_uint32_t ap_queue_info_num_idlers(fd_queue_info_t *queue_info); -apr_status_t ap_queue_info_term(fd_queue_info_t *queue_info); +AP_DECLARE(apr_status_t) ap_queue_info_create(fd_queue_info_t **queue_info, + apr_pool_t *pool, int max_idlers, + int max_recycled_pools); +AP_DECLARE(apr_status_t) ap_queue_info_set_idle(fd_queue_info_t *queue_info, + apr_pool_t *pool_to_recycle); +AP_DECLARE(apr_status_t) ap_queue_info_try_get_idler(fd_queue_info_t *queue_info); +AP_DECLARE(apr_status_t) ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info, + int *had_to_block); +AP_DECLARE(apr_uint32_t) ap_queue_info_num_idlers(fd_queue_info_t *queue_info); +AP_DECLARE(apr_status_t) ap_queue_info_term(fd_queue_info_t *queue_info); -typedef struct timer_event_t timer_event_t; +AP_DECLARE(void) ap_queue_info_pop_pool(fd_queue_info_t *queue_info, + apr_pool_t **recycled_pool); +AP_DECLARE(void) ap_queue_info_push_pool(fd_queue_info_t *queue_info, + apr_pool_t *pool_to_recycle); +AP_DECLARE(void) ap_queue_info_free_idle_pools(fd_queue_info_t *queue_info); struct timer_event_t { @@ -67,6 +71,7 @@ struct timer_event_t int canceled; apr_array_header_t *remove; }; +typedef struct timer_event_t timer_event_t; struct fd_queue_t { @@ -82,23 +87,22 @@ struct fd_queue_t }; typedef struct fd_queue_t fd_queue_t; -void ap_pop_pool(apr_pool_t **recycled_pool, fd_queue_info_t *queue_info); -void ap_push_pool(fd_queue_info_t *queue_info, apr_pool_t *pool_to_recycle); -void ap_free_idle_pools(fd_queue_info_t *queue_info); +AP_DECLARE(apr_status_t) ap_queue_create(fd_queue_t **pqueue, + int capacity, apr_pool_t *p); +AP_DECLARE(apr_status_t) ap_queue_push_socket(fd_queue_t *queue, + apr_socket_t *sd, void *sd_baton, + apr_pool_t *p); +AP_DECLARE(apr_status_t) ap_queue_push_timer(fd_queue_t *queue, + timer_event_t *te); +AP_DECLARE(apr_status_t) ap_queue_pop_something(fd_queue_t *queue, + apr_socket_t **sd, void **sd_baton, + apr_pool_t **p, timer_event_t **te); +#define ap_queue_pop_socket(q_, s_, p_) \ + ap_queue_pop_something((q_), (s_), NULL, (p_), NULL) -apr_status_t ap_queue_create(fd_queue_t **pqueue, int capacity, apr_pool_t *p); -apr_status_t ap_queue_push_socket(fd_queue_t *queue, - apr_socket_t *sd, void *sd_baton, - apr_pool_t *p); -apr_status_t ap_queue_push_timer(fd_queue_t *queue, timer_event_t *te); -apr_status_t ap_queue_pop_something(fd_queue_t *queue, - apr_socket_t **sd, void **sd_baton, - apr_pool_t **p, timer_event_t **te); -#define ap_queue_pop_socket(q_, s_, p_) \ - ap_queue_pop_something((q_), (s_), NULL, (p_), NULL) -apr_status_t ap_queue_interrupt_all(fd_queue_t *queue); -apr_status_t ap_queue_interrupt_one(fd_queue_t *queue); -apr_status_t ap_queue_term(fd_queue_t *queue); +AP_DECLARE(apr_status_t) ap_queue_interrupt_all(fd_queue_t *queue); +AP_DECLARE(apr_status_t) ap_queue_interrupt_one(fd_queue_t *queue); +AP_DECLARE(apr_status_t) ap_queue_term(fd_queue_t *queue); #endif /* APR_HAS_THREADS */ -- 2.40.0