mirror of
https://github.com/apache/httpd.git
synced 2025-08-06 11:06:17 +00:00
ab: Stop worker at end of -t in any case, not only interruption.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910870 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
26
support/ab.c
26
support/ab.c
@ -249,10 +249,12 @@ typedef STACK_OF(X509) X509_STACK_TYPE;
|
|||||||
|
|
||||||
/* ------------------- DEFINITIONS -------------------------- */
|
/* ------------------- DEFINITIONS -------------------------- */
|
||||||
|
|
||||||
#ifndef LLONG_MAX
|
#if defined(APR_INT64_MAX)
|
||||||
#define AB_MAX APR_INT64_C(0x7fffffffffffffff)
|
#define AB_TIME_MAX APR_INT64_MAX
|
||||||
|
#elif defined(LLONG_MAX)
|
||||||
|
#define AB_TIME_MAX LLONG_MAX
|
||||||
#else
|
#else
|
||||||
#define AB_MAX LLONG_MAX
|
#define AB_TIME_MAX APR_INT64_C(0x7fffffffffffffff)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* default number of requests on a time limited test */
|
/* default number of requests on a time limited test */
|
||||||
@ -481,12 +483,12 @@ static apr_thread_cond_t *workers_can_start;
|
|||||||
|
|
||||||
static APR_INLINE int worker_can_stop(struct worker *worker)
|
static APR_INLINE int worker_can_stop(struct worker *worker)
|
||||||
{
|
{
|
||||||
return (lasttime >= stoptime
|
return (stoptime <= lasttime
|
||||||
|| (rlimited && worker->metrics.done >= worker->requests));
|
|| (rlimited && worker->metrics.done >= worker->requests));
|
||||||
}
|
}
|
||||||
static APR_INLINE int worker_can_connect(struct worker *worker)
|
static APR_INLINE int worker_can_connect(struct worker *worker)
|
||||||
{
|
{
|
||||||
return !(lasttime >= stoptime
|
return !(stoptime <= lasttime
|
||||||
|| (rlimited && worker->started >= worker->requests));
|
|| (rlimited && worker->started >= worker->requests));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1229,8 +1231,8 @@ static void output_results(void)
|
|||||||
apr_int64_t i, count = ap_min(metrics.done, requests);
|
apr_int64_t i, count = ap_min(metrics.done, requests);
|
||||||
apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0;
|
apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0;
|
||||||
apr_time_t meancon, meantot, meand, meanwait;
|
apr_time_t meancon, meantot, meand, meanwait;
|
||||||
apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX, mind = AB_MAX,
|
apr_interval_time_t mincon = AB_TIME_MAX, mintot = AB_TIME_MAX,
|
||||||
minwait = AB_MAX;
|
mind = AB_TIME_MAX, minwait = AB_TIME_MAX;
|
||||||
apr_interval_time_t maxcon = 0, maxtot = 0, maxd = 0, maxwait = 0;
|
apr_interval_time_t maxcon = 0, maxtot = 0, maxd = 0, maxwait = 0;
|
||||||
apr_interval_time_t mediancon = 0, mediantot = 0, mediand = 0, medianwait = 0;
|
apr_interval_time_t mediancon = 0, mediantot = 0, mediand = 0, medianwait = 0;
|
||||||
double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0;
|
double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0;
|
||||||
@ -1528,7 +1530,7 @@ static void output_html_results(void)
|
|||||||
/* work out connection times */
|
/* work out connection times */
|
||||||
apr_int64_t i, count = ap_min(metrics.done, requests);
|
apr_int64_t i, count = ap_min(metrics.done, requests);
|
||||||
apr_interval_time_t totalcon = 0, total = 0;
|
apr_interval_time_t totalcon = 0, total = 0;
|
||||||
apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX;
|
apr_interval_time_t mincon = AB_TIME_MAX, mintot = AB_TIME_MAX;
|
||||||
apr_interval_time_t maxcon = 0, maxtot = 0;
|
apr_interval_time_t maxcon = 0, maxtot = 0;
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
@ -2389,7 +2391,7 @@ static int test(void)
|
|||||||
|
|
||||||
/* ok - lets start */
|
/* ok - lets start */
|
||||||
start = lasttime = apr_time_now();
|
start = lasttime = apr_time_now();
|
||||||
stoptime = tlimit ? (start + apr_time_from_sec(tlimit)) : AB_MAX;
|
stoptime = tlimit ? start + apr_time_from_sec(tlimit) : AB_TIME_MAX;
|
||||||
|
|
||||||
#if APR_HAS_THREADS
|
#if APR_HAS_THREADS
|
||||||
if (num_workers > 1) {
|
if (num_workers > 1) {
|
||||||
@ -2575,7 +2577,7 @@ static void worker_test(struct worker *worker)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (worker->polled > 0 && stoptime);
|
} while (worker->polled > 0 && stoptime > lasttime);
|
||||||
|
|
||||||
assert(worker_can_stop(worker));
|
assert(worker_can_stop(worker));
|
||||||
}
|
}
|
||||||
@ -2645,9 +2647,9 @@ static void workers_may_exit(int unused)
|
|||||||
{
|
{
|
||||||
(void)unused;
|
(void)unused;
|
||||||
|
|
||||||
test_aborted = -1;
|
|
||||||
lasttime = apr_time_now(); /* record final time if interrupted */
|
|
||||||
stoptime = 0; /* everyone stop now! */
|
stoptime = 0; /* everyone stop now! */
|
||||||
|
lasttime = apr_time_now(); /* record final time if interrupted */
|
||||||
|
test_aborted = -1;
|
||||||
|
|
||||||
#ifdef APR_POLLSET_WAKEABLE
|
#ifdef APR_POLLSET_WAKEABLE
|
||||||
/* wake up poll()ing workers */
|
/* wake up poll()ing workers */
|
||||||
|
Reference in New Issue
Block a user