( 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; \
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;
}
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);
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;
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);
"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);
"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);
/* 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);
}
}
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);
}
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);
}
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 */
}
}
else {
- ap_push_pool(worker_queue_info, ptrans);
+ ap_queue_info_push_pool(worker_queue_info, ptrans);
}
}
} /* if:else on pt->type */
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 */
}
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;
{
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) {
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
}
}
-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 */
}
}
-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);
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
{
int canceled;
apr_array_header_t *remove;
};
+typedef struct timer_event_t timer_event_t;
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 */