summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2022-05-17 13:11:44 -0700
committerQi Wang <interwq@gmail.com>2022-05-17 16:07:40 -0700
commitcd5aaf308a46ce8ad0232ee9efb697b4ed33a7e4 (patch)
treea0e9294c8a41d411b64979bb1e2cd43cb5710f4c
parent70d4102f48dce2d5755e9139a15eeec606f97bff (diff)
downloadjemalloc-cd5aaf308a46ce8ad0232ee9efb697b4ed33a7e4.tar.gz
Improve the failure message upon opt_experimental_infallible_new.
-rw-r--r--src/jemalloc_cpp.cpp10
-rw-r--r--test/integration/cpp/infallible_new_true.cpp4
2 files changed, 10 insertions, 4 deletions
diff --git a/src/jemalloc_cpp.cpp b/src/jemalloc_cpp.cpp
index 451655f1..8b53a392 100644
--- a/src/jemalloc_cpp.cpp
+++ b/src/jemalloc_cpp.cpp
@@ -57,8 +57,14 @@ JEMALLOC_NOINLINE
static void *
handleOOM(std::size_t size, bool nothrow) {
if (opt_experimental_infallible_new) {
- safety_check_fail("<jemalloc>: Allocation failed and "
- "opt.experimental_infallible_new is true. Aborting.\n");
+ const char *huge_warning = (size >= ((std::size_t)1 << 30)) ?
+ "This may be caused by heap corruption, if the large size "
+ "is unexpected (suggest building with sanitizers for "
+ "debugging)." : "";
+
+ safety_check_fail("<jemalloc>: Allocation of size %zu failed. "
+ "%s opt.experimental_infallible_new is true. Aborting.\n",
+ size, huge_warning);
return nullptr;
}
diff --git a/test/integration/cpp/infallible_new_true.cpp b/test/integration/cpp/infallible_new_true.cpp
index d6754128..3976f08b 100644
--- a/test/integration/cpp/infallible_new_true.cpp
+++ b/test/integration/cpp/infallible_new_true.cpp
@@ -9,8 +9,8 @@
typedef void (*abort_hook_t)(const char *message);
bool fake_abort_called;
void fake_abort(const char *message) {
- if (strcmp(message, "<jemalloc>: Allocation failed and "
- "opt.experimental_infallible_new is true. Aborting.\n") != 0) {
+ const char *expected_start = "<jemalloc>: Allocation of size";
+ if (strncmp(message, expected_start, strlen(expected_start) != 0)) {
abort();
}
fake_abort_called = true;