Commit c0c0dbe8 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Revert an old (~10yr) change to the fd Q; move back to

FIFO rather than LIFO, for more consistent performance
so that older requests don't suffer

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1064269 13f79535-47bb-0310-9956-ffa450edef68
parent f2676281
Loading
Loading
Loading
Loading
+11 −2
Changes for server/mpm/event/fdqueue.c: 11 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -310,6 +310,8 @@ apr_status_t ap_queue_init(fd_queue_t * queue, int queue_capacity,
    queue->data = apr_palloc(a, queue_capacity * sizeof(fd_queue_elem_t));
    queue->bounds = queue_capacity;
    queue->nelts = 0;
    queue->in = 0;
    queue->out = 0;

    /* Set all the sockets in the queue to NULL */
    for (i = 0; i < queue_capacity; ++i)
@@ -340,7 +342,10 @@ apr_status_t ap_queue_push(fd_queue_t * queue, apr_socket_t * sd,
    AP_DEBUG_ASSERT(!queue->terminated);
    AP_DEBUG_ASSERT(!ap_queue_full(queue));

    elem = &queue->data[queue->nelts];
    elem = &queue->data[queue->in];
    queue->in++;
    if (queue->in >= queue->bounds)
        queue->in -= queue->bounds;
    elem->sd = sd;
    elem->cs = cs;
    elem->p = p;
@@ -420,7 +425,11 @@ apr_status_t ap_queue_pop_something(fd_queue_t * queue, apr_socket_t ** sd,
        APR_RING_REMOVE(*te_out, link);
    }
    else {
        elem = &queue->data[--queue->nelts];
        elem = &queue->data[queue->out];
        queue->out++;
        if (queue->out >= queue->bounds)
            queue->out -= queue->bounds;
        queue->nelts--;
        *sd = elem->sd;
        *cs = elem->cs;
        *p = elem->p;
+4 −2
Changes for server/mpm/event/fdqueue.h: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -70,8 +70,10 @@ struct fd_queue_t
{
    APR_RING_HEAD(timers_t, timer_event_t) timers;
    fd_queue_elem_t *data;
    int nelts;
    int bounds;
    unsigned int nelts;
    unsigned int bounds;
    unsigned int in;
    unsigned int out;
    apr_thread_mutex_t *one_big_mutex;
    apr_thread_cond_t *not_empty;
    int terminated;
+11 −2
Changes for server/mpm/worker/fdqueue.c: 11 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -284,6 +284,8 @@ apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a)
    queue->data = apr_palloc(a, queue_capacity * sizeof(fd_queue_elem_t));
    queue->bounds = queue_capacity;
    queue->nelts = 0;
    queue->in = 0;
    queue->out = 0;

    /* Set all the sockets in the queue to NULL */
    for (i = 0; i < queue_capacity; ++i)
@@ -312,7 +314,10 @@ apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p)
    AP_DEBUG_ASSERT(!queue->terminated);
    AP_DEBUG_ASSERT(!ap_queue_full(queue));

    elem = &queue->data[queue->nelts];
    elem = &queue->data[queue->in];
    queue->in++;
    if (queue->in >= queue->bounds)
        queue->in -= queue->bounds;
    elem->sd = sd;
    elem->p = p;
    queue->nelts++;
@@ -361,7 +366,11 @@ apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p)
        }
    }

    elem = &queue->data[--queue->nelts];
    elem = &queue->data[queue->out];
    queue->out++;
    if (queue->out >= queue->bounds)
        queue->out -= queue->bounds;
    queue->nelts--;
    *sd = elem->sd;
    *p = elem->p;
#ifdef AP_DEBUG
+4 −2
Changes for server/mpm/worker/fdqueue.h: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -55,8 +55,10 @@ typedef struct fd_queue_elem_t fd_queue_elem_t;

struct fd_queue_t {
    fd_queue_elem_t    *data;
    int                 nelts;
    int                 bounds;
    unsigned int       nelts;
    unsigned int       bounds;
    unsigned int       in;
    unsigned int       out;
    apr_thread_mutex_t *one_big_mutex;
    apr_thread_cond_t  *not_empty;
    int                 terminated;