Merge pull request #35 from Gawaboumga/POSIX
Fixed POSIX mutexes being not recursive + minor fixes Former-commit-id: ecd3fb06ec6e53f1cfd237b3d0a860cf88978c03
This commit is contained in:
commit
bb74a9a6cb
|
|
@ -11,7 +11,7 @@
|
||||||
#elif defined(NAZARA_PLATFORM_POSIX)
|
#elif defined(NAZARA_PLATFORM_POSIX)
|
||||||
#include <Nazara/Core/Posix/ConditionVariableImpl.hpp>
|
#include <Nazara/Core/Posix/ConditionVariableImpl.hpp>
|
||||||
#else
|
#else
|
||||||
#error Thread condition has no implementation
|
#error Condition variable has no implementation
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Nazara/Core/Debug.hpp>
|
#include <Nazara/Core/Debug.hpp>
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@ void NzMemoryManager::Initialize()
|
||||||
|
|
||||||
#ifdef NAZARA_PLATFORM_WINDOWS
|
#ifdef NAZARA_PLATFORM_WINDOWS
|
||||||
InitializeCriticalSection(&s_mutex);
|
InitializeCriticalSection(&s_mutex);
|
||||||
|
//#elif defined(NAZARA_PLATFORM_POSIX) is already done in the namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
|
@ -250,6 +251,8 @@ void NzMemoryManager::Uninitialize()
|
||||||
{
|
{
|
||||||
#ifdef NAZARA_PLATFORM_WINDOWS
|
#ifdef NAZARA_PLATFORM_WINDOWS
|
||||||
DeleteCriticalSection(&s_mutex);
|
DeleteCriticalSection(&s_mutex);
|
||||||
|
#elif defined(NAZARA_PLATFORM_POSIX)
|
||||||
|
pthread_mutex_destroy(&s_mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FILE* log = std::fopen(s_logFileName, "a");
|
FILE* log = std::fopen(s_logFileName, "a");
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ bool NzConditionVariableImpl::Wait(NzMutexImpl* mutex, nzUInt32 timeout)
|
||||||
{
|
{
|
||||||
// get the current time
|
// get the current time
|
||||||
timeval tv;
|
timeval tv;
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, nullptr);
|
||||||
|
|
||||||
// construct the time limit (current time + time to wait)
|
// construct the time limit (current time + time to wait)
|
||||||
timespec ti;
|
timespec ti;
|
||||||
|
|
|
||||||
|
|
@ -82,14 +82,15 @@ bool NzDirectoryImpl::Exists(const NzString& dirPath)
|
||||||
NzString NzDirectoryImpl::GetCurrent()
|
NzString NzDirectoryImpl::GetCurrent()
|
||||||
{
|
{
|
||||||
NzString currentPath;
|
NzString currentPath;
|
||||||
char* path = new char[_PC_PATH_MAX];
|
char* path = getcwd(nullptr, 0);
|
||||||
|
|
||||||
if (getcwd(path, _PC_PATH_MAX))
|
if (path)
|
||||||
|
{
|
||||||
currentPath = path;
|
currentPath = path;
|
||||||
|
free(path);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
NazaraError("Unable to get current directory: " + NzError::GetLastSystemError());
|
NazaraError("Unable to get current directory: " + NzError::GetLastSystemError()); // Bug: initialisation -> if no path for log !
|
||||||
|
|
||||||
delete[] path;
|
|
||||||
|
|
||||||
return currentPath;
|
return currentPath;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,11 @@
|
||||||
|
|
||||||
NzMutexImpl::NzMutexImpl()
|
NzMutexImpl::NzMutexImpl()
|
||||||
{
|
{
|
||||||
pthread_mutex_init(&m_handle, NULL);
|
pthread_mutexattr_t attr;
|
||||||
|
pthread_mutexattr_init(&attr);
|
||||||
|
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
||||||
|
|
||||||
|
pthread_mutex_init(&m_handle, &attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
NzMutexImpl::~NzMutexImpl()
|
NzMutexImpl::~NzMutexImpl()
|
||||||
|
|
|
||||||
|
|
@ -57,9 +57,9 @@ void NzThreadImpl::Sleep(nzUInt32 time)
|
||||||
|
|
||||||
// create a mutex and thread condition
|
// create a mutex and thread condition
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
pthread_mutex_init(&mutex, 0);
|
pthread_mutex_init(&mutex, nullptr);
|
||||||
pthread_cond_t condition;
|
pthread_cond_t condition;
|
||||||
pthread_cond_init(&condition, 0);
|
pthread_cond_init(&condition, nullptr);
|
||||||
|
|
||||||
// wait...
|
// wait...
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
bool NzTaskSchedulerImpl::Initialize(unsigned int workerCount)
|
bool NzTaskSchedulerImpl::Initialize(unsigned int workerCount)
|
||||||
{
|
{
|
||||||
if (s_workerCount > 0)
|
if (IsInitialized())
|
||||||
return true; // Déjà initialisé
|
return true; // Déjà initialisé
|
||||||
|
|
||||||
#if NAZARA_CORE_SAFE
|
#if NAZARA_CORE_SAFE
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue