httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christophe JAILLET <christophe.jail...@wanadoo.fr>
Subject Re: svn commit: r1788672 - in /httpd/httpd/trunk: ./ modules/http2/
Date Mon, 27 Mar 2017 19:29:34 GMT
Le 25/03/2017 à 17:07, icing@apache.org a écrit :
> Author: icing
> Date: Sat Mar 25 16:07:30 2017
> New Revision: 1788672
>
> URL: http://svn.apache.org/viewvc?rev=1788672&view=rev
> Log:
> On the trunk:
>
> mod_http2: h2 workers with improved scalability for better scheduling
>       performance. There are H2MaxWorkers threads created at start and the
>       number is kept constant.

[...]

> +static apr_status_t get_next(h2_slot *slot)
>   {
> +    h2_workers *workers = slot->workers;
>       apr_status_t status;
> -    apr_time_t wait_until = 0, now;
> -    h2_workers *workers = ctx;
> -    h2_task *task = NULL;
> -
> -    *ptask = NULL;
> -    *psticky = 0;
>       
> -    status = apr_thread_mutex_lock(workers->lock);
> -    if (status == APR_SUCCESS) {
> -        ++workers->idle_workers;
> -        ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, workers->s,
> -                     "h2_worker(%d): looking for work", worker->id);
> -
> -        while (!h2_worker_is_aborted(worker) && !workers->aborted
> -               && !(task = next_task(workers))) {
> -
> -            /* Need to wait for a new tasks to arrive. If we are above
> -             * minimum workers, we do a timed wait. When timeout occurs
> -             * and we have still more workers, we shut down one after
> -             * the other. */
> -            cleanup_zombies(workers, 0);
> -            if (workers->worker_count > workers->min_workers) {
> -                now = apr_time_now();
> -                if (now >= wait_until) {
> -                    wait_until = now + apr_time_from_sec(workers->max_idle_secs);
> -                }
> -
> -                ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, workers->s,
> -                             "h2_worker(%d): waiting signal, "
> -                             "workers=%d, idle=%d", worker->id,
> -                             (int)workers->worker_count,
> -                             workers->idle_workers);
> -                status = apr_thread_cond_timedwait(workers->mplx_added,
> -                                                   workers->lock,
> -                                                   wait_until - now);
> -                if (status == APR_TIMEUP
> -                    && workers->worker_count > workers->min_workers)
{
> -                    /* waited long enough without getting a task and
> -                     * we are above min workers, abort this one. */
> -                    ap_log_error(APLOG_MARK, APLOG_TRACE3, 0,
> -                                 workers->s,
> -                                 "h2_workers: aborting idle worker");
> -                    h2_worker_abort(worker);
> -                    break;
> -                }
> -            }
> -            else {
> -                ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, workers->s,
> -                             "h2_worker(%d): waiting signal (eternal), "
> -                             "worker_count=%d, idle=%d", worker->id,
> -                             (int)workers->worker_count,
> -                             workers->idle_workers);
> -                apr_thread_cond_wait(workers->mplx_added, workers->lock);
> -            }
> +    slot->task = NULL;
> +    while (!slot->aborted) {
> +        if (!slot->task) {
> +            status = h2_fifo_try_peek(workers->mplxs, mplx_peek, slot);
>           }
New compilation warning with gcc 6.3.0.
    variable ‘status’ set but not used


Mime
View raw message