Commit 46ee443c authored by Paul Querna's avatar Paul Querna
Browse files

Convert events to have an associated pool.

* server/mpm/simple/simple_types.h
    (simple_timer_t): Add Pool and a pointer to the associated simple core.
    (simple_core_t): Remove dead timer ring, no recycling of timer events for now.

* server/mpm/simple/simple_event.h: Update register_timer signature with pool.

* server/mpm/simple/simple_event.c
    (simple_register_timer): Allocate the event structure out of the pool,
        and when this pool is destroyed, unregister the timer.
    (simple_timer_run): New util function for running a timer and cleaning up 
        the pool callbacks.

* server/mpm/simple/simple_core.c
    (simple_core_init): Remvoe dead timer ring

* server/mpm/simple/simple_run.c
    (simple_main_setup_timers): Pass in pool to register call.
    (simple_timer_invoke): Use new simple_timer_run function.
    (simple_child_loop): Remove dead timer ring.

* server/mpm/simple/simple_io.c
    (simple_io_process): Pass in pool when registering timers.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@709657 13f79535-47bb-0310-9956-ffa450edef68
parent dd1ec041
Loading
Loading
Loading
Loading
+2 −1
Changes for server/mpm/simple/simple_children.c: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -118,7 +118,8 @@ void simple_check_children_size(simple_core_t * sc, void *baton)

    simple_register_timer(sc,
                          simple_check_children_size,
                          NULL, SPAWN_CHILDREN_INTERVAL);
                          NULL, SPAWN_CHILDREN_INTERVAL,
                          sc->pool);

    if (sc->run_single_process && sc->restart_num == 2) {
        static int run = 0;
+0 −1
Changes for server/mpm/simple/simple_core.c: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ apr_status_t simple_core_init(simple_core_t * sc, apr_pool_t * pool)
    sc->spawn_via = SIMPLE_SPAWN_FORK;

    APR_RING_INIT(&sc->timer_ring, simple_timer_t, link);
    APR_RING_INIT(&sc->dead_timer_ring, simple_timer_t, link);

    rv = apr_thread_mutex_create(&sc->mtx, 0, sc->pool);

+31 −12
Changes for server/mpm/simple/simple_event.c: 31 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -19,10 +19,25 @@
#include "simple_types.h"
#include "simple_event.h"

static apr_status_t
simple_timer_pool_cleanup(void *baton)
{
    simple_timer_t *elem = (simple_timer_t *)baton;
    simple_core_t *sc = elem->sc;

    apr_thread_mutex_lock(sc->mtx);
    APR_RING_REMOVE(elem, link);
    apr_thread_mutex_unlock(sc->mtx);

    return APR_SUCCESS;
}


void
simple_register_timer(simple_core_t * sc,
                      simple_timer_cb cb,
                      void *baton, apr_time_t relative_time)
                      void *baton, apr_time_t relative_time,
                      apr_pool_t *shutdown_pool)
{
    simple_timer_t *elem = NULL;
    simple_timer_t *ep = NULL;
@@ -32,23 +47,16 @@ simple_register_timer(simple_core_t * sc,
    apr_thread_mutex_lock(sc->mtx);

    APR_RING_CHECK_CONSISTENCY(&sc->timer_ring, simple_timer_t, link);
    APR_RING_CHECK_CONSISTENCY(&sc->dead_timer_ring, simple_timer_t, link);

    if (!APR_RING_EMPTY(&sc->dead_timer_ring, simple_timer_t, link)) {
        elem = APR_RING_FIRST(&sc->dead_timer_ring);
        APR_RING_REMOVE(elem, link);
        APR_RING_CHECK_CONSISTENCY(&sc->dead_timer_ring, simple_timer_t,
                                   link);
    }
    else {
        elem =
            (simple_timer_t *) apr_pcalloc(sc->pool, sizeof(simple_timer_t));
    }
    elem = (simple_timer_t *) apr_pcalloc(shutdown_pool, sizeof(simple_timer_t));

    APR_RING_ELEM_INIT(elem, link);
    elem->expires = t;
    elem->cb = cb;
    elem->baton = baton;
    elem->pool = shutdown_pool;
    elem->sc = sc;
    apr_pool_cleanup_register(elem->pool, elem, simple_timer_pool_cleanup, apr_pool_cleanup_null);

    APR_RING_CHECK_CONSISTENCY(&sc->timer_ring, simple_timer_t, link);

@@ -80,3 +88,14 @@ simple_register_timer(simple_core_t * sc,

    apr_thread_mutex_unlock(sc->mtx);
}


void
simple_timer_run(simple_timer_t *ep)
{
    apr_pool_cleanup_kill(ep->pool, ep, simple_timer_pool_cleanup);

    ep->cb(ep->sc, ep->baton);
}

+8 −1
Changes for server/mpm/simple/simple_event.h: 8 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -27,8 +27,14 @@
void
simple_register_timer(simple_core_t * sc,
                      simple_timer_cb cb,
                      void *baton, apr_time_t relative_time);
                      void *baton,
                      apr_time_t relative_time, 
                      apr_pool_t *shutdown_pool);

void
simple_timer_run(simple_timer_t *ep);

#if THESE_ARE_JUST_IDEAS_PATCHES_WELCOME
/**
 * @see apr_poll.h for watch_for values
 */
@@ -49,5 +55,6 @@ simple_register_file_io(simple_core_t * sc,
                        apr_file_t * file,
                        int watch_for, apr_time_t relative_timeout);

#endif

#endif /* APACHE_MPM_SIMPLE_EVENT_H */
+4 −2
Changes for server/mpm/simple/simple_io.c: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -102,7 +102,8 @@ static apr_status_t simple_io_process(simple_conn_t * scon)
                                      scon,
                                      scon->c->base_server !=
                                      NULL ? scon->c->base_server->
                                      timeout : ap_server_conf->timeout);
                                      timeout : ap_server_conf->timeout,
                                      scon->pool);

                cs->pfd.reqevents = APR_POLLOUT | APR_POLLHUP | APR_POLLERR;

@@ -139,7 +140,8 @@ static apr_status_t simple_io_process(simple_conn_t * scon)
                                  scon,
                                  scon->c->base_server !=
                                  NULL ? scon->c->base_server->
                                  timeout : ap_server_conf->timeout);
                                  timeout : ap_server_conf->timeout,
                                  scon->pool);

            cs->pfd.reqevents = APR_POLLIN;

Loading