X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fdebug.cpp;h=3c82ed9e1c23ec62e51fb5bc3e91d0c7608efa23;hb=be8d1d2d99ad835b5de7277b7b518c334113e795;hp=9f10426467309c7cede129ef3014f2501c63857d;hpb=6be74d17df75714066b36cfa6ae40081526ef477;p=dragonfireclient.git diff --git a/src/debug.cpp b/src/debug.cpp index 9f1042646..3c82ed9e1 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -21,13 +21,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "debug.h" #include "exceptions.h" -#include "threads.h" -#include -#include +#include +#include #include #include #include -#include "threading/mutex.h" +#include #include "threading/mutex_auto_lock.h" #include "config.h" @@ -37,6 +36,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #endif +#if USE_CURSES + #include "terminal_chat_console.h" +#endif + /* Assert */ @@ -44,180 +47,33 @@ with this program; if not, write to the Free Software Foundation, Inc., void sanity_check_fn(const char *assertion, const char *file, unsigned int line, const char *function) { +#if USE_CURSES + g_term_console.stopAndWaitforThread(); +#endif + errorstream << std::endl << "In thread " << std::hex - << (unsigned long)thr_get_current_thread_id() << ":" << std::endl; + << std::this_thread::get_id() << ":" << std::endl; errorstream << file << ":" << line << ": " << function << ": An engine assumption '" << assertion << "' failed." << std::endl; - debug_stacks_print_to(errorstream); - abort(); } void fatal_error_fn(const char *msg, const char *file, unsigned int line, const char *function) { +#if USE_CURSES + g_term_console.stopAndWaitforThread(); +#endif + errorstream << std::endl << "In thread " << std::hex - << (unsigned long)thr_get_current_thread_id() << ":" << std::endl; + << std::this_thread::get_id() << ":" << std::endl; errorstream << file << ":" << line << ": " << function - << ": A fatal error occured: " << msg << std::endl; - - debug_stacks_print_to(errorstream); + << ": A fatal error occurred: " << msg << std::endl; abort(); } -/* - DebugStack -*/ - -struct DebugStack -{ - DebugStack(threadid_t id); - void print(FILE *file, bool everything); - void print(std::ostream &os, bool everything); - - threadid_t threadid; - char stack[DEBUG_STACK_SIZE][DEBUG_STACK_TEXT_SIZE]; - int stack_i; // Points to the lowest empty position - int stack_max_i; // Highest i that was seen -}; - -DebugStack::DebugStack(threadid_t id) -{ - threadid = id; - stack_i = 0; - stack_max_i = 0; - memset(stack, 0, DEBUG_STACK_SIZE*DEBUG_STACK_TEXT_SIZE); -} - -void DebugStack::print(FILE *file, bool everything) -{ - fprintf(file, "DEBUG STACK FOR THREAD %lx:\n", - (unsigned long)threadid); - - for(int i=0; i g_debug_stacks; -Mutex g_debug_stacks_mutex; - -void debug_stacks_init() -{ -} - -void debug_stacks_print_to(std::ostream &os) -{ - MutexAutoLock lock(g_debug_stacks_mutex); - - os<<"Debug stacks:"<::iterator - i = g_debug_stacks.begin(); - i != g_debug_stacks.end(); ++i) - { - i->second->print(os, false); - } -} - -void debug_stacks_print() -{ - debug_stacks_print_to(errorstream); -} - -DebugStacker::DebugStacker(const char *text) -{ - threadid_t threadid = thr_get_current_thread_id(); - - MutexAutoLock lock(g_debug_stacks_mutex); - - std::map::iterator n; - n = g_debug_stacks.find(threadid); - if(n != g_debug_stacks.end()) - { - m_stack = n->second; - } - else - { - /*DEBUGPRINT("Creating new debug stack for thread %x\n", - (unsigned int)threadid);*/ - m_stack = new DebugStack(threadid); - g_debug_stacks[threadid] = m_stack; - } - - if(m_stack->stack_i >= DEBUG_STACK_SIZE) - { - m_overflowed = true; - } - else - { - m_overflowed = false; - - snprintf(m_stack->stack[m_stack->stack_i], - DEBUG_STACK_TEXT_SIZE, "%s", text); - m_stack->stack_i++; - if(m_stack->stack_i > m_stack->stack_max_i) - m_stack->stack_max_i = m_stack->stack_i; - } -} - -DebugStacker::~DebugStacker() -{ - MutexAutoLock lock(g_debug_stacks_mutex); - - if(m_overflowed == true) - return; - - m_stack->stack_i--; - - if(m_stack->stack_i == 0) - { - threadid_t threadid = m_stack->threadid; - /*DEBUGPRINT("Deleting debug stack for thread %x\n", - (unsigned int)threadid);*/ - delete m_stack; - g_debug_stacks.erase(threadid); - } -} - #ifdef _MSC_VER const char *Win32ExceptionCodeToString(DWORD exception_code)