From 36b43d9cbfd8b272a864410c627e787c1038ca65 Mon Sep 17 00:00:00 2001 From: Gabriel Ferreira Date: Sat, 6 Apr 2024 16:20:40 +0200 Subject: [PATCH] core: Fix TimerImpl maybe uninitialized issue --- src/core/model/timer-impl.h | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/core/model/timer-impl.h b/src/core/model/timer-impl.h index 16bd1f63c..746ef3b74 100644 --- a/src/core/model/timer-impl.h +++ b/src/core/model/timer-impl.h @@ -104,8 +104,6 @@ MakeTimerImpl(U(fn)(Ts...)) { struct FnTimerImpl : public TimerImplX&...> { - using FN = U (*)(Ts...); - FnTimerImpl(void (*fn)(Ts...)) : m_fn(fn) { @@ -128,7 +126,7 @@ MakeTimerImpl(U(fn)(Ts...)) std::apply([this](Ts... args) { (m_fn)(args...); }, m_arguments); } - FN m_fn; + decltype(fn) m_fn; std::tuple...> m_arguments; }* function = new FnTimerImpl(fn); @@ -153,11 +151,8 @@ MakeTimerImpl(U (V::*memPtr)(Ts...), OBJ_PTR objPtr) { struct MemFnTimerImpl : public TimerImplX&...> { - using MEM_PTR = U (V::*)(Ts...); - - MemFnTimerImpl(MEM_PTR memPtr, OBJ_PTR objPtr) - : m_memPtr(memPtr), - m_objPtr(objPtr) + MemFnTimerImpl(decltype(memPtr) memPtr, OBJ_PTR objPtr) + : m_memPtr(std::bind_front(memPtr, objPtr)) { } @@ -170,18 +165,17 @@ MakeTimerImpl(U (V::*memPtr)(Ts...), OBJ_PTR objPtr) { return std::apply( [&, this](Ts... args) { - return Simulator::Schedule(delay, m_memPtr, m_objPtr, args...); + return Simulator::Schedule(delay, std::bind(m_memPtr, args...)); }, m_arguments); } void Invoke() override { - std::apply([this](Ts... args) { ((*m_objPtr).*m_memPtr)(args...); }, m_arguments); + std::apply(m_memPtr, m_arguments); } - MEM_PTR m_memPtr; - OBJ_PTR m_objPtr; + std::function m_memPtr; std::tuple...> m_arguments; }* function = new MemFnTimerImpl(memPtr, objPtr);