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
