tests/kern/ssl_sendfile: fix 'random' and 'basic' flakyness
The read of c.sbytes needs to be synchronized with mutex. The problem was
fixed for 'truncate' and 'grow' with 8a95085635, but these two suffer
from the same problem. Provide require_sbytes(), a locked wrapper around
ATF_REQUIRE() to reduce copy and paste.
Submitted by: olivier
Differential Revision: https://reviews.freebsd.org/D55781
This commit is contained in:
@@ -285,6 +285,14 @@ SSL_read_b(SSL *ssl, void *buf, int size)
|
||||
return (rv);
|
||||
}
|
||||
|
||||
static void
|
||||
require_sbytes(struct ctx *c, ssize_t expect)
|
||||
{
|
||||
ATF_REQUIRE(pthread_mutex_lock(&c->mtx) == 0);
|
||||
ATF_REQUIRE(c->sbytes == expect);
|
||||
ATF_REQUIRE(pthread_mutex_unlock(&c->mtx) == 0);
|
||||
}
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(basic);
|
||||
ATF_TC_BODY(basic, tc)
|
||||
{
|
||||
@@ -302,7 +310,7 @@ ATF_TC_BODY(basic, tc)
|
||||
nread += n;
|
||||
}
|
||||
ATF_REQUIRE(nread == FSIZE);
|
||||
ATF_REQUIRE(c.sbytes == FSIZE);
|
||||
require_sbytes(&c, FSIZE);
|
||||
|
||||
common_cleanup(&c);
|
||||
}
|
||||
@@ -332,7 +340,7 @@ ATF_TC_BODY(random, tc)
|
||||
nread += n;
|
||||
}
|
||||
ATF_REQUIRE(nread == expect);
|
||||
ATF_REQUIRE(c.sbytes == (ssize_t)expect);
|
||||
require_sbytes(&c, (ssize_t)expect);
|
||||
}
|
||||
|
||||
common_cleanup(&c);
|
||||
@@ -367,9 +375,7 @@ ATF_TC_BODY(truncate, tc)
|
||||
nread += n;
|
||||
}
|
||||
ATF_REQUIRE(nread == TRUNC);
|
||||
ATF_REQUIRE(pthread_mutex_lock(&c.mtx) == 0);
|
||||
ATF_REQUIRE(c.sbytes == TRUNC);
|
||||
ATF_REQUIRE(pthread_mutex_unlock(&c.mtx) == 0);
|
||||
require_sbytes(&c, TRUNC);
|
||||
|
||||
common_cleanup(&c);
|
||||
}
|
||||
@@ -418,9 +424,7 @@ ATF_TC_BODY(grow, tc)
|
||||
nread += n;
|
||||
}
|
||||
ATF_REQUIRE(nread == GROW);
|
||||
ATF_REQUIRE(pthread_mutex_lock(&c.mtx) == 0);
|
||||
ATF_REQUIRE(c.sbytes == FSIZE + GROW);
|
||||
ATF_REQUIRE(pthread_mutex_unlock(&c.mtx) == 0);
|
||||
require_sbytes(&c, FSIZE + GROW);
|
||||
|
||||
common_cleanup(&c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user