Skip to content
Snippets Groups Projects
Commit de0cdbc0 authored by sapier's avatar sapier
Browse files

Fix log threadname lookup handling not beeing threadsafe

parent e605d702
No related branches found
No related tags found
No related merge requests found
......@@ -29,7 +29,8 @@
JMutex::JMutex()
{
initialized = false;
pthread_mutex_init(&mutex,NULL);
initialized = true;
}
JMutex::~JMutex()
......@@ -40,19 +41,14 @@ JMutex::~JMutex()
int JMutex::Init()
{
if (initialized)
return ERR_JMUTEX_ALREADYINIT;
pthread_mutex_init(&mutex,NULL);
initialized = true;
return 0;
return 0;
}
int JMutex::Lock()
{
if (!initialized)
return ERR_JMUTEX_NOTINIT;
pthread_mutex_lock(&mutex);
return 0;
}
......@@ -61,7 +57,7 @@ int JMutex::Unlock()
{
if (!initialized)
return ERR_JMUTEX_NOTINIT;
pthread_mutex_unlock(&mutex);
return 0;
}
......@@ -29,7 +29,14 @@
JMutex::JMutex()
{
initialized = false;
#ifdef JMUTEX_CRITICALSECTION
InitializeCriticalSection(&mutex);
#else
mutex = CreateMutex(NULL,FALSE,NULL);
if (mutex == NULL)
return ERR_JMUTEX_CANTCREATEMUTEX;
#endif // JMUTEX_CRITICALSECTION
initialized = true;
}
JMutex::~JMutex()
......@@ -44,16 +51,6 @@ JMutex::~JMutex()
int JMutex::Init()
{
if (initialized)
return ERR_JMUTEX_ALREADYINIT;
#ifdef JMUTEX_CRITICALSECTION
InitializeCriticalSection(&mutex);
#else
mutex = CreateMutex(NULL,FALSE,NULL);
if (mutex == NULL)
return ERR_JMUTEX_CANTCREATEMUTEX;
#endif // JMUTEX_CRITICALSECTION
initialized = true;
return 0;
}
......
......@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
std::list<ILogOutput*> log_outputs[LMT_NUM_VALUES];
std::map<threadid_t, std::string> log_threadnames;
JMutex log_threadnamemutex;
void log_add_output(ILogOutput *out, enum LogMessageLevel lev)
{
......@@ -60,13 +61,17 @@ void log_remove_output(ILogOutput *out)
void log_register_thread(const std::string &name)
{
threadid_t id = get_current_thread_id();
log_threadnamemutex.Lock();
log_threadnames[id] = name;
log_threadnamemutex.Unlock();
}
void log_deregister_thread()
{
threadid_t id = get_current_thread_id();
log_threadnamemutex.Lock();
log_threadnames.erase(id);
log_threadnamemutex.Unlock();
}
static std::string get_lev_string(enum LogMessageLevel lev)
......@@ -144,7 +149,7 @@ class Logbuf : public std::streambuf
}
m_buf += c;
}
private:
enum LogMessageLevel m_lev;
std::string m_buf;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment