summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2023-07-08 12:43:44 +0200
committerYann Ylavic <ylavic@apache.org>2023-07-08 12:43:44 +0200
commit03f6e86ec23d812dd5564d97622f14b5dd57150c (patch)
tree14fb06044cd6d2660c3cedb2b0880d9b09f150f3 /support
parentab: Ignore the delay if it's larger than the timeout. (diff)
downloadapache2-03f6e86ec23d812dd5564d97622f14b5dd57150c.tar.xz
apache2-03f6e86ec23d812dd5564d97622f14b5dd57150c.zip
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
Diffstat (limited to 'support')
-rw-r--r--support/ab.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/support/ab.c b/support/ab.c
index 9e2853a5f0..713ad3b03d 100644
--- a/support/ab.c
+++ b/support/ab.c
@@ -249,10 +249,12 @@ typedef STACK_OF(X509) X509_STACK_TYPE;
/* ------------------- DEFINITIONS -------------------------- */
-#ifndef LLONG_MAX
-#define AB_MAX APR_INT64_C(0x7fffffffffffffff)
+#if defined(APR_INT64_MAX)
+#define AB_TIME_MAX APR_INT64_MAX
+#elif defined(LLONG_MAX)
+#define AB_TIME_MAX LLONG_MAX
#else
-#define AB_MAX LLONG_MAX
+#define AB_TIME_MAX APR_INT64_C(0x7fffffffffffffff)
#endif
/* 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)
{
- return (lasttime >= stoptime
+ return (stoptime <= lasttime
|| (rlimited && worker->metrics.done >= worker->requests));
}
static APR_INLINE int worker_can_connect(struct worker *worker)
{
- return !(lasttime >= stoptime
+ return !(stoptime <= lasttime
|| (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_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0;
apr_time_t meancon, meantot, meand, meanwait;
- apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX, mind = AB_MAX,
- minwait = AB_MAX;
+ apr_interval_time_t mincon = AB_TIME_MAX, mintot = AB_TIME_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 mediancon = 0, mediantot = 0, mediand = 0, medianwait = 0;
double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0;
@@ -1528,7 +1530,7 @@ static void output_html_results(void)
/* work out connection times */
apr_int64_t i, count = ap_min(metrics.done, requests);
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;
for (i = 0; i < count; i++) {
@@ -2389,7 +2391,7 @@ static int test(void)
/* ok - lets start */
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 (num_workers > 1) {
@@ -2575,7 +2577,7 @@ static void worker_test(struct worker *worker)
continue;
}
}
- } while (worker->polled > 0 && stoptime);
+ } while (worker->polled > 0 && stoptime > lasttime);
assert(worker_can_stop(worker));
}
@@ -2645,9 +2647,9 @@ static void workers_may_exit(int unused)
{
(void)unused;
- test_aborted = -1;
- lasttime = apr_time_now(); /* record final time if interrupted */
stoptime = 0; /* everyone stop now! */
+ lasttime = apr_time_now(); /* record final time if interrupted */
+ test_aborted = -1;
#ifdef APR_POLLSET_WAKEABLE
/* wake up poll()ing workers */