Thanks for the review, Christophe! Both issues addressed in r1789276.

> Am 27.03.2017 um 21:29 schrieb Christophe JAILLET 
> <[email protected]>:
> 
> Le 25/03/2017 à 17:07, [email protected] 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
> 

Stefan Eissing

<green/>bytes GmbH
Hafenstrasse 16
48155 Münster
www.greenbytes.de

Reply via email to