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 5626a1ec20)
This commit is contained in:
Ibrahn Sahir 2019-05-19 14:05:15 +01:00 committed by Rémi Verschelde
parent ffab947e1c
commit 6d57ebed1a
1 changed files with 7 additions and 5 deletions

View File

@ -302,10 +302,6 @@ void MessageQueue::flush() {
_call_function(target, message->target, args, message->args, message->type & FLAG_SHOW_ERROR); _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; } break;
case TYPE_NOTIFICATION: { case TYPE_NOTIFICATION: {
@ -319,11 +315,17 @@ void MessageQueue::flush() {
// messages don't expect a return value // messages don't expect a return value
target->set(message->target, *arg); target->set(message->target, *arg);
arg->~Variant();
} break; } 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(); message->~Message();
_THREAD_SAFE_LOCK_ _THREAD_SAFE_LOCK_