summaryrefslogtreecommitdiff
path: root/src/debug.cpp
diff options
context:
space:
mode:
authorShadowNinja <ShadowNinja@users.noreply.github.com>2017-06-11 03:43:05 -0400
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-06-11 09:43:05 +0200
commit6c5e5e202394ce8063e3c2d9b663145bc4f8efce (patch)
tree2916ed7f7fc19c934fe5f614a9eeb1a282f13081 /src/debug.cpp
parent5cc8ad946efb3612eb6ea8655780b29fe4c62e19 (diff)
downloadminetest-6c5e5e202394ce8063e3c2d9b663145bc4f8efce.tar.gz
minetest-6c5e5e202394ce8063e3c2d9b663145bc4f8efce.tar.bz2
minetest-6c5e5e202394ce8063e3c2d9b663145bc4f8efce.zip
Remove threads.h and replace its definitions with their C++11 equivalents (#5957)
This also changes threadProc's signature, since C++11 supports arbitrary thread function signatures.
Diffstat (limited to 'src/debug.cpp')
-rw-r--r--src/debug.cpp88
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);
}
}