diff options
Diffstat (limited to 'src/debug.cpp')
-rw-r--r-- | src/debug.cpp | 88 |
1 files changed, 34 insertions, 54 deletions
diff --git a/src/debug.cpp b/src/debug.cpp index 0490fcf4e..86b727812 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -21,12 +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 <stdio.h> #include <stdlib.h> #include <cstring> #include <map> #include <sstream> +#include <thread> #include "threading/mutex_auto_lock.h" #include "config.h" @@ -52,7 +52,7 @@ void sanity_check_fn(const char *assertion, const char *file, #endif errorstream << std::endl << "In thread " << std::hex - << 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; @@ -69,7 +69,7 @@ void fatal_error_fn(const char *msg, const char *file, #endif errorstream << std::endl << "In thread " << std::hex - << 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; @@ -84,19 +84,19 @@ void fatal_error_fn(const char *msg, const char *file, struct DebugStack { - DebugStack(threadid_t id); + DebugStack(std::thread::id id); void print(FILE *file, bool everything); void print(std::ostream &os, bool everything); - threadid_t threadid; + std::thread::id thread_id; 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) +DebugStack::DebugStack(std::thread::id id) { - threadid = id; + thread_id = id; stack_i = 0; stack_max_i = 0; memset(stack, 0, DEBUG_STACK_SIZE*DEBUG_STACK_TEXT_SIZE); @@ -105,52 +105,43 @@ DebugStack::DebugStack(threadid_t id) void DebugStack::print(FILE *file, bool everything) { std::ostringstream os; - os << threadid; + os << thread_id; fprintf(file, "DEBUG STACK FOR THREAD %s:\n", os.str().c_str()); - for(int i=0; i<stack_max_i; i++) - { - if(i == stack_i && everything == false) + for (int i = 0; i < stack_max_i; i++) { + if (i == stack_i && everything == false) break; - if(i < stack_i) + if (i < stack_i) fprintf(file, "#%d %s\n", i, stack[i]); else fprintf(file, "(Leftover data: #%d %s)\n", i, stack[i]); } - if(stack_i == DEBUG_STACK_SIZE) + if (stack_i == DEBUG_STACK_SIZE) fprintf(file, "Probably overflown.\n"); } void DebugStack::print(std::ostream &os, bool everything) { - os<<"DEBUG STACK FOR THREAD "<<threadid<<": "<<std::endl; + os<<"DEBUG STACK FOR THREAD "<<thread_id<<": "<<std::endl; - for(int i=0; i<stack_max_i; i++) - { + for(int i = 0; i < stack_max_i; i++) { if(i == stack_i && everything == false) break; - if(i < stack_i) + if (i < stack_i) os<<"#"<<i<<" "<<stack[i]<<std::endl; else os<<"(Leftover data: #"<<i<<" "<<stack[i]<<")"<<std::endl; } - if(stack_i == DEBUG_STACK_SIZE) + if (stack_i == DEBUG_STACK_SIZE) os<<"Probably overflown."<<std::endl; } -// Note: Using pthread_t (that is, threadid_t on POSIX platforms) as the key to -// a std::map is naughty. Formally, a pthread_t may only be compared using -// pthread_equal() - pthread_t lacks the well-ordered property needed for -// comparisons in binary searches. This should be fixed at some point by -// defining a custom comparator with an arbitrary but stable ordering of -// pthread_t, but it isn't too important since none of our supported platforms -// implement pthread_t as a non-ordinal type. -std::map<threadid_t, DebugStack*> g_debug_stacks; +std::map<std::thread::id, DebugStack*> g_debug_stacks; std::mutex g_debug_stacks_mutex; void debug_stacks_init() @@ -163,11 +154,8 @@ void debug_stacks_print_to(std::ostream &os) os<<"Debug stacks:"<<std::endl; - for(std::map<threadid_t, DebugStack*>::iterator - i = g_debug_stacks.begin(); - i != g_debug_stacks.end(); ++i) - { - i->second->print(os, false); + for (auto it : g_debug_stacks) { + it.second->print(os, false); } } @@ -178,36 +166,29 @@ void debug_stacks_print() DebugStacker::DebugStacker(const char *text) { - threadid_t threadid = thr_get_current_thread_id(); + std::thread::id thread_id = std::this_thread::get_id(); MutexAutoLock lock(g_debug_stacks_mutex); - std::map<threadid_t, DebugStack*>::iterator n; - n = g_debug_stacks.find(threadid); - if(n != g_debug_stacks.end()) - { + auto n = g_debug_stacks.find(thread_id); + if (n != g_debug_stacks.end()) { m_stack = n->second; - } - else - { + } else { /*DEBUGPRINT("Creating new debug stack for thread %x\n", - (unsigned int)threadid);*/ - m_stack = new DebugStack(threadid); - g_debug_stacks[threadid] = m_stack; + (unsigned int)thread_id);*/ + m_stack = new DebugStack(thread_id); + g_debug_stacks[thread_id] = m_stack; } - if(m_stack->stack_i >= DEBUG_STACK_SIZE) - { + if (m_stack->stack_i >= DEBUG_STACK_SIZE) { m_overflowed = true; - } - else - { + } 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) + if (m_stack->stack_i > m_stack->stack_max_i) m_stack->stack_max_i = m_stack->stack_i; } } @@ -216,18 +197,17 @@ DebugStacker::~DebugStacker() { MutexAutoLock lock(g_debug_stacks_mutex); - if(m_overflowed == true) + if (m_overflowed == true) return; m_stack->stack_i--; - if(m_stack->stack_i == 0) - { - threadid_t threadid = m_stack->threadid; + if (m_stack->stack_i == 0) { + std::thread::id thread_id = m_stack->thread_id; /*DEBUGPRINT("Deleting debug stack for thread %x\n", - (unsigned int)threadid);*/ + (unsigned int)thread_id);*/ delete m_stack; - g_debug_stacks.erase(threadid); + g_debug_stacks.erase(thread_id); } } |