Little fixes and recursive mutex in NzFile

Former-commit-id: 7b5f3a6b14d027dc664e5d220257a22caca25c95
This commit is contained in:
Youri Hubaut 2015-05-02 16:19:46 +02:00
parent 854efefda1
commit b29d1ffcd8
8 changed files with 26 additions and 23 deletions

View File

@ -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>

View File

@ -85,10 +85,10 @@ void NzFile::Close()
bool NzFile::Delete() bool NzFile::Delete()
{ {
NazaraLock(m_mutex)
Close(); Close();
NazaraLock(m_mutex)
return Delete(m_filePath); return Delete(m_filePath);
} }
@ -266,11 +266,12 @@ std::size_t NzFile::Read(void* buffer, std::size_t typeSize, unsigned int count)
bool NzFile::Rename(const NzString& newFilePath) bool NzFile::Rename(const NzString& newFilePath)
{ {
NazaraLock(m_mutex)
bool opened = IsOpen(); bool opened = IsOpen();
Close(); Close();
NazaraLock(m_mutex)
bool success = Rename(m_filePath, newFilePath); bool success = Rename(m_filePath, newFilePath);
if (success) if (success)
m_filePath = NormalizePath(newFilePath); m_filePath = NormalizePath(newFilePath);
@ -283,10 +284,10 @@ bool NzFile::Rename(const NzString& newFilePath)
bool NzFile::Open(unsigned long openMode) bool NzFile::Open(unsigned long openMode)
{ {
NazaraLock(m_mutex)
Close(); Close();
NazaraLock(m_mutex)
if (m_filePath.IsEmpty()) if (m_filePath.IsEmpty())
return false; return false;
@ -314,8 +315,6 @@ bool NzFile::Open(unsigned long openMode)
bool NzFile::Open(const NzString& filePath, unsigned long openMode) bool NzFile::Open(const NzString& filePath, unsigned long openMode)
{ {
NazaraLock(m_mutex)
Close(); Close();
SetFile(filePath); SetFile(filePath);
@ -361,10 +360,10 @@ void NzFile::SetEndianness(nzEndianness endianness)
bool NzFile::SetFile(const NzString& filePath) bool NzFile::SetFile(const NzString& filePath)
{ {
NazaraLock(m_mutex)
if (IsOpen()) if (IsOpen())
{ {
NazaraLock(m_mutex)
if (filePath.IsEmpty()) if (filePath.IsEmpty())
return false; return false;
@ -446,8 +445,6 @@ bool NzFile::Write(const NzString& string)
std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int count) std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int count)
{ {
NazaraLock(m_mutex)
#if NAZARA_CORE_SAFE #if NAZARA_CORE_SAFE
if (!IsOpen()) if (!IsOpen())
{ {
@ -462,6 +459,8 @@ std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int
} }
#endif #endif
NazaraLock(m_mutex)
if (!buffer || count == 0 || typeSize == 0) if (!buffer || count == 0 || typeSize == 0)
return 0; return 0;

View File

@ -209,6 +209,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;
@ -224,6 +225,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_MLTFileName, "a"); FILE* log = std::fopen(s_MLTFileName, "a");

View File

@ -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;

View File

@ -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;
} }

View File

@ -7,7 +7,7 @@
NzMutexImpl::NzMutexImpl() NzMutexImpl::NzMutexImpl()
{ {
pthread_mutex_init(&m_handle, NULL); pthread_mutex_init(&m_handle, nullptr);
} }
NzMutexImpl::~NzMutexImpl() NzMutexImpl::~NzMutexImpl()

View File

@ -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);

View File

@ -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