From c24f9b42bab37bf06e79e96e68d6518b1e29dc01 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 1 Jan 2020 17:34:37 +0100 Subject: [PATCH] - the timidity safe_malloc functions may not throw exceptions. There is a high chance of them getting called within the stream servicing function which cannot deal with abnormal conditions, so the only choice here is performing a hard abort. --- libraries/timidity/common.cpp | 10 ++++++++++ libraries/timidityplus/common.cpp | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libraries/timidity/common.cpp b/libraries/timidity/common.cpp index 6e77611a3..f58b53543 100644 --- a/libraries/timidity/common.cpp +++ b/libraries/timidity/common.cpp @@ -34,6 +34,7 @@ namespace Timidity /* This'll allocate memory or die. */ void *safe_malloc(size_t count) { +#if 0 char buffer[80]; void *p; if (count > (1 << 21)) @@ -51,6 +52,15 @@ void *safe_malloc(size_t count) throw std::runtime_error(buffer); } return 0; // Unreachable. +#else + // No, we cannot throw exceptions here - this code can get called from real-time worker threads. + auto p = malloc(count); + if (!p) + { + std::terminate(); // we must abort, though... + } + return p; +#endif } diff --git a/libraries/timidityplus/common.cpp b/libraries/timidityplus/common.cpp index ce275c16b..053a57f0c 100644 --- a/libraries/timidityplus/common.cpp +++ b/libraries/timidityplus/common.cpp @@ -39,7 +39,7 @@ void *safe_malloc(size_t count) auto p = malloc(count); if (p == nullptr) { - // I_FatalError("Out of memory"); + abort(); } return p; } @@ -54,7 +54,7 @@ void *safe_realloc(void *ptr, size_t count) auto p = realloc(ptr, count); if (p == nullptr) { - // I_FatalError("Out of memory"); + abort(); } return p; } @@ -65,7 +65,7 @@ char *safe_strdup(const char *s) auto p = strdup(s); if (p == nullptr) { - // I_FatalError("Out of memory"); + abort(); } return p; }