57 lines
1.8 KiB
C
57 lines
1.8 KiB
C
|
#include "test/jemalloc_test.h"
|
||
|
|
||
|
static bool abort_called = false;
|
||
|
static void (*default_malloc_message)(void *, const char *);
|
||
|
|
||
|
static void
|
||
|
mock_invalid_conf_abort(void) {
|
||
|
abort_called = true;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
null_malloc_message(void *_1, const char* _2) {
|
||
|
}
|
||
|
|
||
|
TEST_BEGIN(test_hpa_validate_conf) {
|
||
|
test_skip_if(!hpa_supported());
|
||
|
void *ptr = malloc(4096);
|
||
|
/* Need to restore this here to see any possible assert messages */
|
||
|
malloc_message = default_malloc_message;
|
||
|
assert_true(abort_called,
|
||
|
"Should have aborted due to invalid values for hpa_dirty_mult and "
|
||
|
"hpa_hugification_threshold_ratio");
|
||
|
free(ptr);
|
||
|
}
|
||
|
TEST_END
|
||
|
|
||
|
/*
|
||
|
* We have to set `abort_conf:true` here and not via the `MALLOC_CONF`
|
||
|
* environment variable in the associated shell script for this test. This is
|
||
|
* because when testing on FreeBSD (where Jemalloc is the system allocator) in
|
||
|
* CI configs where HPA is not supported, setting `abort_conf:true` there would
|
||
|
* result in the system Jemalloc picking this up and aborting before we could
|
||
|
* ever even launch the test.
|
||
|
*/
|
||
|
const char *malloc_conf = "abort_conf:true";
|
||
|
|
||
|
int
|
||
|
main(void) {
|
||
|
/*
|
||
|
* OK, this is a sort of nasty hack. We don't want to add *another*
|
||
|
* config option for HPA (the intent is that it becomes available on
|
||
|
* more platforms over time, and we're trying to prune back config
|
||
|
* options generally. But we'll get initialization errors on other
|
||
|
* platforms if we set hpa:true in the MALLOC_CONF (even if we set
|
||
|
* abort_conf:false as well). So we reach into the internals and set
|
||
|
* them directly, but only if we know that we're actually going to do
|
||
|
* something nontrivial in the tests.
|
||
|
*/
|
||
|
if (hpa_supported()) {
|
||
|
default_malloc_message = malloc_message;
|
||
|
malloc_message = null_malloc_message;
|
||
|
opt_hpa = true;
|
||
|
invalid_conf_abort = mock_invalid_conf_abort;
|
||
|
}
|
||
|
return test_no_reentrancy(test_hpa_validate_conf);
|
||
|
}
|