Fixed thread-safety

Fixed huge mistake in Clock code (Allocating a mutex everytime instead
of locking it)
HashDigest and StringStream class are no longer thread-safe (That was
stupid anyway)


Former-commit-id: d07a6859df27eac2c5171e75720b3963b6a5fbbb
This commit is contained in:
Lynix 2014-03-06 09:49:39 +01:00
parent ef9592a0fd
commit 42c10268d2
14 changed files with 56 additions and 67 deletions

View File

@ -61,10 +61,8 @@
#define NAZARA_THREADSAFETY_DIRECTORY 1 // NzDirectory
#define NAZARA_THREADSAFETY_DYNLIB 1 // NzDynLib
#define NAZARA_THREADSAFETY_FILE 1 // NzFile
#define NAZARA_THREADSAFETY_HASHDIGEST 0 // NzHashDigest
#define NAZARA_THREADSAFETY_LOG 1 // NzLog
#define NAZARA_THREADSAFETY_RESOURCE 1 // NzResource
#define NAZARA_THREADSAFETY_STRINGSTREAM 0 // NzStringStream
// Le nombre de spinlocks à utiliser avec les critical sections de Windows (0 pour désactiver)
#define NAZARA_CORE_WINDOWS_CS_SPINLOCKS 4096

View File

@ -20,9 +20,9 @@
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_DIRECTORY
#include <Nazara/Core/ThreadSafety.hpp>
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
class NzDirectoryImpl;

View File

@ -22,9 +22,9 @@
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_DYNLIB
#include <Nazara/Core/ThreadSafety.hpp>
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
using NzDynLibFunc = int (*)(); // Type "générique" de pointeur sur fonction

View File

@ -18,9 +18,9 @@
#include <Nazara/Core/String.hpp>
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_FILE
#include <Nazara/Core/ThreadSafety.hpp>
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
class NzFileImpl;

View File

@ -13,15 +13,15 @@
#include <Nazara/Core/String.hpp>
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_LOG
#include <Nazara/Core/ThreadSafety.hpp>
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#ifdef NAZARA_DEBUG
#define NazaraDebug(txt) NazaraNotice(txt)
#define NazaraDebug(txt) NazaraNotice(txt)
#else
#define NazaraDebug(txt)
#define NazaraDebug(txt)
#endif
#define NazaraLog NzLog::Instance()

View File

@ -12,9 +12,9 @@
#include <unordered_map>
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_RESOURCE
#include <Nazara/Core/ThreadSafety.hpp>
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
class NzResourceListener;

View File

@ -12,12 +12,6 @@
#include <string>
#include <vector>
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_STRINGSTREAM
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
class NAZARA_API NzStringStream
{
public:
@ -48,8 +42,6 @@ class NAZARA_API NzStringStream
operator NzString() const;
private:
NazaraMutexAttrib(m_mutex, mutable)
std::vector<NzString> m_strings;
unsigned int m_bufferSize;
};

View File

@ -13,6 +13,12 @@
#error OS not handled
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_CLOCK
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
namespace
@ -47,7 +53,7 @@ float NzClock::GetSeconds() const
nzUInt64 NzClock::GetMicroseconds() const
{
NazaraMutex(m_mutex);
NazaraLock(m_mutex);
return m_elapsedTime + (NzGetMicroseconds()-m_refTime);
}
@ -59,14 +65,14 @@ nzUInt64 NzClock::GetMilliseconds() const
bool NzClock::IsPaused() const
{
NazaraMutex(m_mutex);
NazaraLock(m_mutex);
return m_paused;
}
void NzClock::Pause()
{
NazaraMutex(m_mutex);
NazaraLock(m_mutex);
if (!m_paused)
{
@ -79,7 +85,7 @@ void NzClock::Pause()
void NzClock::Restart()
{
NazaraMutex(m_mutex);
NazaraLock(m_mutex);
m_elapsedTime = 0;
m_refTime = NzGetMicroseconds();
@ -88,7 +94,7 @@ void NzClock::Restart()
void NzClock::Unpause()
{
NazaraMutex(m_mutex);
NazaraLock(m_mutex);
if (m_paused)
{

View File

@ -16,6 +16,12 @@
#error OS not handled
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_DIRECTORY
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
namespace

View File

@ -15,6 +15,12 @@
#error No implementation for this platform
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_DYNLIB
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
NzDynLib::NzDynLib() :

View File

@ -19,6 +19,12 @@
#error OS not handled
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_FILE
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
NzFile::NzFile() :

View File

@ -11,7 +11,13 @@
#include <cstring>
#if NAZARA_CORE_DUPLICATE_LOG_TO_COUT
#include <cstdio>
#include <cstdio>
#endif
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_LOG
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
@ -116,7 +122,7 @@ void NzLog::Write(const NzString& string)
if (m_writeTime)
{
line.Reserve(23 + string.GetSize() + 1);
line.Resize(23);
line.Set(23, '\0'); // Buffer non-initialisé
time_t currentTime = std::time(nullptr);
std::strftime(&line[0], 24, "%d/%m/%Y - %H:%M:%S: ", std::localtime(&currentTime));

View File

@ -9,6 +9,13 @@
#include <Nazara/Utility/StaticMesh.hpp>
#include <Nazara/Utility/VertexDeclaration.hpp>
#include <typeinfo>
#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_RESOURCE
#include <Nazara/Core/ThreadSafety.hpp>
#else
#include <Nazara/Core/ThreadSafetyOff.hpp>
#endif
#include <Nazara/Core/Debug.hpp>
NzResource::NzResource(bool persistent) :

View File

@ -18,8 +18,6 @@ m_bufferSize(str.GetSize())
NzString NzStringStream::ToString() const
{
NazaraLock(m_mutex)
NzString string;
string.Reserve(m_bufferSize);
@ -31,8 +29,6 @@ NzString NzStringStream::ToString() const
NzStringStream& NzStringStream::operator<<(bool boolean)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Boolean(boolean));
m_bufferSize += m_strings.back().GetSize();
@ -41,8 +37,6 @@ NzStringStream& NzStringStream::operator<<(bool boolean)
NzStringStream& NzStringStream::operator<<(short number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -51,8 +45,6 @@ NzStringStream& NzStringStream::operator<<(short number)
NzStringStream& NzStringStream::operator<<(unsigned short number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -61,8 +53,6 @@ NzStringStream& NzStringStream::operator<<(unsigned short number)
NzStringStream& NzStringStream::operator<<(int number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -71,8 +61,6 @@ NzStringStream& NzStringStream::operator<<(int number)
NzStringStream& NzStringStream::operator<<(unsigned int number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -81,8 +69,6 @@ NzStringStream& NzStringStream::operator<<(unsigned int number)
NzStringStream& NzStringStream::operator<<(long number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -91,8 +77,6 @@ NzStringStream& NzStringStream::operator<<(long number)
NzStringStream& NzStringStream::operator<<(unsigned long number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -101,8 +85,6 @@ NzStringStream& NzStringStream::operator<<(unsigned long number)
NzStringStream& NzStringStream::operator<<(long long number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -111,8 +93,6 @@ NzStringStream& NzStringStream::operator<<(long long number)
NzStringStream& NzStringStream::operator<<(unsigned long long number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -121,8 +101,6 @@ NzStringStream& NzStringStream::operator<<(unsigned long long number)
NzStringStream& NzStringStream::operator<<(float number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -131,8 +109,6 @@ NzStringStream& NzStringStream::operator<<(float number)
NzStringStream& NzStringStream::operator<<(double number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -141,8 +117,6 @@ NzStringStream& NzStringStream::operator<<(double number)
NzStringStream& NzStringStream::operator<<(long double number)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Number(number));
m_bufferSize += m_strings.back().GetSize();
@ -151,8 +125,6 @@ NzStringStream& NzStringStream::operator<<(long double number)
NzStringStream& NzStringStream::operator<<(char character)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString(character));
m_bufferSize++;
@ -161,8 +133,6 @@ NzStringStream& NzStringStream::operator<<(char character)
NzStringStream& NzStringStream::operator<<(unsigned char character)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString(static_cast<char>(character)));
m_bufferSize++;
@ -171,8 +141,6 @@ NzStringStream& NzStringStream::operator<<(unsigned char character)
NzStringStream& NzStringStream::operator<<(const char* string)
{
NazaraLock(m_mutex)
m_strings.push_back(string);
m_bufferSize += m_strings.back().GetSize();
@ -181,8 +149,6 @@ NzStringStream& NzStringStream::operator<<(const char* string)
NzStringStream& NzStringStream::operator<<(const std::string& string)
{
NazaraLock(m_mutex)
m_strings.push_back(string);
m_bufferSize += string.size();
@ -191,8 +157,6 @@ NzStringStream& NzStringStream::operator<<(const std::string& string)
NzStringStream& NzStringStream::operator<<(const NzString& string)
{
NazaraLock(m_mutex)
m_strings.push_back(string);
m_bufferSize += string.GetSize();
@ -201,8 +165,6 @@ NzStringStream& NzStringStream::operator<<(const NzString& string)
NzStringStream& NzStringStream::operator<<(const void* ptr)
{
NazaraLock(m_mutex)
m_strings.push_back(NzString::Pointer(ptr));
m_bufferSize += sizeof(void*)*2;