From 9dec2aafb5a3b6f2f57c6028d7a79466558749bb Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 2 Sep 2018 10:59:46 +0200 Subject: [PATCH] Fix static init ordering crashes in static build of pview Fixes #381 --- panda/src/event/asyncTaskManager.cxx | 1 + panda/src/event/eventHandler.cxx | 1 + panda/src/event/eventQueue.cxx | 1 + panda/src/pipeline/thread.cxx | 2 ++ 4 files changed, 5 insertions(+) diff --git a/panda/src/event/asyncTaskManager.cxx b/panda/src/event/asyncTaskManager.cxx index b80908ddc5..a570609f8a 100644 --- a/panda/src/event/asyncTaskManager.cxx +++ b/panda/src/event/asyncTaskManager.cxx @@ -643,6 +643,7 @@ void AsyncTaskManager:: make_global_ptr() { nassertv(_global_ptr == nullptr); + init_memory_hook(); _global_ptr = new AsyncTaskManager("TaskManager"); _global_ptr->ref(); } diff --git a/panda/src/event/eventHandler.cxx b/panda/src/event/eventHandler.cxx index f74bd8c519..e3e389e1bf 100644 --- a/panda/src/event/eventHandler.cxx +++ b/panda/src/event/eventHandler.cxx @@ -351,6 +351,7 @@ remove_all_hooks() { */ void EventHandler:: make_global_event_handler() { + init_memory_hook(); _global_event_handler = new EventHandler(EventQueue::get_global_event_queue()); } diff --git a/panda/src/event/eventQueue.cxx b/panda/src/event/eventQueue.cxx index bbd07a3725..69c025734c 100644 --- a/panda/src/event/eventQueue.cxx +++ b/panda/src/event/eventQueue.cxx @@ -106,5 +106,6 @@ dequeue_event() { */ void EventQueue:: make_global_event_queue() { + init_memory_hook(); _global_event_queue = new EventQueue; } diff --git a/panda/src/pipeline/thread.cxx b/panda/src/pipeline/thread.cxx index 351e316033..80c32fa7f5 100644 --- a/panda/src/pipeline/thread.cxx +++ b/panda/src/pipeline/thread.cxx @@ -211,6 +211,7 @@ init_main_thread() { static int count = 0; ++count; if (count == 1 && _main_thread == nullptr) { + init_memory_hook(); _main_thread = new MainThread; _main_thread->ref(); } @@ -222,6 +223,7 @@ init_main_thread() { void Thread:: init_external_thread() { if (_external_thread == nullptr) { + init_memory_hook(); _external_thread = new ExternalThread; _external_thread->ref(); }