Skip to content

Commit 5fdafb5

Browse files
committed
Updated failed-alloc callback detection
1 parent 9c9e0a7 commit 5fdafb5

1 file changed

Lines changed: 10 additions & 17 deletions

File tree

src/esp_memory_monitor/memory_monitor.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,22 @@ ESPMemoryMonitor* ESPMemoryMonitor::_allocInstance = nullptr;
99
namespace {
1010
constexpr const char* kSamplerTaskName = "ESPMemoryMon";
1111

12-
template <typename T>
13-
struct FunctionPointerTraits;
14-
15-
template <typename R, typename... Args>
16-
struct FunctionPointerTraits<R (*)(Args...)> {
17-
static constexpr size_t kArity = sizeof...(Args);
18-
};
19-
2012
using RegisterFn = decltype(&heap_caps_register_failed_alloc_callback);
21-
using RegisterTraits = FunctionPointerTraits<RegisterFn>;
22-
using HookTraits = FunctionPointerTraits<esp_alloc_failed_hook_t>;
13+
using HookFn = esp_alloc_failed_hook_t;
14+
using RegisterWithArgFn = esp_err_t (*)(HookFn, void*);
15+
using RegisterNoArgFn = esp_err_t (*)(HookFn);
2316

24-
constexpr bool kRegisterSupportsArg = RegisterTraits::kArity == 2;
25-
constexpr bool kRegisterSupportsNoArg = RegisterTraits::kArity == 1;
26-
constexpr bool kAllocHookTakesArg = HookTraits::kArity == 4;
27-
constexpr bool kAllocHookTakesNoArg = HookTraits::kArity == 3;
17+
constexpr bool kRegisterSupportsArg = std::is_convertible_v<RegisterFn, RegisterWithArgFn>;
18+
constexpr bool kRegisterSupportsNoArg = std::is_convertible_v<RegisterFn, RegisterNoArgFn>;
19+
constexpr bool kHookAcceptsThunk4 = std::is_convertible_v<decltype(&ESPMemoryMonitor::failedAllocThunk4), HookFn>;
20+
constexpr bool kHookAcceptsThunk3 = std::is_convertible_v<decltype(&ESPMemoryMonitor::failedAllocThunk3), HookFn>;
2821

2922
static_assert(kRegisterSupportsArg || kRegisterSupportsNoArg,
3023
"Unsupported heap_caps_register_failed_alloc_callback signature");
31-
static_assert(kAllocHookTakesArg || kAllocHookTakesNoArg, "Unsupported failed alloc hook signature");
24+
static_assert(kHookAcceptsThunk4 || kHookAcceptsThunk3, "Unsupported failed alloc hook signature");
3225

33-
constexpr bool kCanUseThunk4 = kAllocHookTakesArg && kRegisterSupportsArg;
34-
constexpr bool kCanUseThunk3 = kAllocHookTakesNoArg && (kRegisterSupportsArg || kRegisterSupportsNoArg);
26+
constexpr bool kCanUseThunk4 = kHookAcceptsThunk4 && kRegisterSupportsArg;
27+
constexpr bool kCanUseThunk3 = kHookAcceptsThunk3 && (kRegisterSupportsArg || kRegisterSupportsNoArg);
3528

3629
static_assert(kCanUseThunk4 || kCanUseThunk3, "Unsupported failed alloc callback signature");
3730

0 commit comments

Comments
 (0)