MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / clear

Method clear

core/object/message_queue.cpp:316–355  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

314}
315
316void CallQueue::clear() {
317 LOCK_MUTEX;
318
319 if (pages.is_empty()) {
320 UNLOCK_MUTEX;
321 return; // Nothing to clear.
322 }
323
324 for (uint32_t i = 0; i < pages_used; i++) {
325 uint32_t offset = 0;
326 while (offset < page_bytes[i]) {
327 Page *page = pages[i];
328
329 //lock on each iteration, so a call can re-add itself to the message queue
330
331 Message *message = (Message *)&page->data[offset];
332
333 uint32_t advance = sizeof(Message);
334 if ((message->type & FLAG_MASK) != TYPE_NOTIFICATION) {
335 advance += sizeof(Variant) * message->args;
336 }
337
338 offset += advance;
339
340 if ((message->type & FLAG_MASK) != TYPE_NOTIFICATION) {
341 Variant *args = (Variant *)(message + 1);
342 for (int k = 0; k < message->args; k++) {
343 args[k].~Variant();
344 }
345 }
346
347 message->~Message();
348 }
349 }
350
351 pages_used = 1;
352 page_bytes[0] = 0;
353
354 UNLOCK_MUTEX;
355}
356
357void CallQueue::statistics() {
358 LOCK_MUTEX;

Callers 12

init_languagesMethod · 0.45
global_classes_clearMethod · 0.45
get_inheriters_listMethod · 0.45
updateMethod · 0.45
finishMethod · 0.45
~WorkerThreadPoolMethod · 0.45
set_indexedMethod · 0.45
cleanup_defaultsMethod · 0.45
cleanupMethod · 0.45

Calls 2

~MessageMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected