Browse Source

Mend some checks in CallQueue

Pedro J. Estébanez 2 years ago
parent
commit
8654e90759
1 changed files with 3 additions and 2 deletions
  1. 3 2
      core/object/message_queue.cpp

+ 3 - 2
core/object/message_queue.cpp

@@ -62,15 +62,16 @@ Error CallQueue::push_set(Object *p_object, const StringName &p_prop, const Vari
 }
 }
 
 
 Error CallQueue::push_callablep(const Callable &p_callable, const Variant **p_args, int p_argcount, bool p_show_error) {
 Error CallQueue::push_callablep(const Callable &p_callable, const Variant **p_args, int p_argcount, bool p_show_error) {
-	mutex.lock();
 	uint32_t room_needed = sizeof(Message) + sizeof(Variant) * p_argcount;
 	uint32_t room_needed = sizeof(Message) + sizeof(Variant) * p_argcount;
 
 
 	ERR_FAIL_COND_V_MSG(room_needed > uint32_t(PAGE_SIZE_BYTES), ERR_INVALID_PARAMETER, "Message is too large to fit on a page (" + itos(PAGE_SIZE_BYTES) + " bytes), consider passing less arguments.");
 	ERR_FAIL_COND_V_MSG(room_needed > uint32_t(PAGE_SIZE_BYTES), ERR_INVALID_PARAMETER, "Message is too large to fit on a page (" + itos(PAGE_SIZE_BYTES) + " bytes), consider passing less arguments.");
 
 
+	mutex.lock();
+
 	_ensure_first_page();
 	_ensure_first_page();
 
 
 	if ((page_offset + room_needed) > uint32_t(PAGE_SIZE_BYTES)) {
 	if ((page_offset + room_needed) > uint32_t(PAGE_SIZE_BYTES)) {
-		if (room_needed > uint32_t(PAGE_SIZE_BYTES) || pages_used == max_pages) {
+		if (pages_used == max_pages) {
 			ERR_PRINT("Failed method: " + p_callable + ". Message queue out of memory. " + error_text);
 			ERR_PRINT("Failed method: " + p_callable + ". Message queue out of memory. " + error_text);
 			statistics();
 			statistics();
 			mutex.unlock();
 			mutex.unlock();