summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorIbrahn Sahir <ibrahn.sahir@gmail.com>2019-05-19 14:05:15 +0100
committerIbrahn Sahir <ibrahn.sahir@gmail.com>2019-05-19 14:05:15 +0100
commit5626a1ec20b8df3faa0afd54787d08ccebed927d (patch)
treeb0fde748a270229c6ebb8e85049abac3ec5c8524 /core
parent33897d9b5844aa0147d55841845427ed599d069f (diff)
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.
Diffstat (limited to 'core')
-rw-r--r--core/message_queue.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/core/message_queue.cpp b/core/message_queue.cpp
index 1d661f25f9..32d2b805f6 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_