From 6d57ebed1a6b7deda0a258e5b5b44f84d0734ca2 Mon Sep 17 00:00:00 2001 From: Ibrahn Sahir Date: Sun, 19 May 2019 14:05:15 +0100 Subject: [PATCH] MessageQueue::flush now always destroys parameters of a spent message Previously, destructors of Variant parameters were not called if the target of the message was not found. (cherry picked from commit 5626a1ec20b8df3faa0afd54787d08ccebed927d) --- core/message_queue.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/message_queue.cpp b/core/message_queue.cpp index c57bd4081c5..229cd1261c9 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -302,10 +302,6 @@ void MessageQueue::flush() { _call_function(target, message->target, args, message->args, message->type & FLAG_SHOW_ERROR); - for (int i = 0; i < message->args; i++) { - args[i].~Variant(); - } - } break; case TYPE_NOTIFICATION: { @@ -319,11 +315,17 @@ void MessageQueue::flush() { // messages don't expect a return value target->set(message->target, *arg); - arg->~Variant(); } break; } } + if ((message->type & FLAG_MASK) != TYPE_NOTIFICATION) { + Variant *args = (Variant *)(message + 1); + for (int i = 0; i < message->args; i++) { + args[i].~Variant(); + } + } + message->~Message(); _THREAD_SAFE_LOCK_