From 301bb56efce066cb09b86b2d69aefe05470ea95e Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 2 May 2015 09:14:45 +0200 Subject: [PATCH 1/7] Core/ParameterList: Fixed compilation Thanks to Bl4ckb0ne Former-commit-id: eca68dafb00ffcefc00a5c2e3177f26ca14d10dd --- src/Nazara/Core/ParameterList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nazara/Core/ParameterList.cpp b/src/Nazara/Core/ParameterList.cpp index 746f70ce6..2bafb827f 100644 --- a/src/Nazara/Core/ParameterList.cpp +++ b/src/Nazara/Core/ParameterList.cpp @@ -267,7 +267,7 @@ bool NzParameterList::GetUserdataParameter(const NzString& name, void** value) c else { NazaraError("Parameter value is not an userdata"); - return nullptr; + return false; } } From b29d1ffcd80b3bc72bdd104e9c6b42b8bab6a319 Mon Sep 17 00:00:00 2001 From: Youri Hubaut Date: Sat, 2 May 2015 16:19:46 +0200 Subject: [PATCH 2/7] Little fixes and recursive mutex in NzFile Former-commit-id: 7b5f3a6b14d027dc664e5d220257a22caca25c95 --- src/Nazara/Core/ConditionVariable.cpp | 2 +- src/Nazara/Core/File.cpp | 23 +++++++++---------- src/Nazara/Core/MemoryManager.cpp | 3 +++ .../Core/Posix/ConditionVariableImpl.cpp | 2 +- src/Nazara/Core/Posix/DirectoryImpl.cpp | 11 +++++---- src/Nazara/Core/Posix/MutexImpl.cpp | 2 +- src/Nazara/Core/Posix/ThreadImpl.cpp | 4 ++-- src/Nazara/Core/Win32/TaskSchedulerImpl.cpp | 2 +- 8 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/Nazara/Core/ConditionVariable.cpp b/src/Nazara/Core/ConditionVariable.cpp index ac8dcd50a..b9194d233 100644 --- a/src/Nazara/Core/ConditionVariable.cpp +++ b/src/Nazara/Core/ConditionVariable.cpp @@ -11,7 +11,7 @@ #elif defined(NAZARA_PLATFORM_POSIX) #include #else - #error Thread condition has no implementation + #error Condition variable has no implementation #endif #include diff --git a/src/Nazara/Core/File.cpp b/src/Nazara/Core/File.cpp index 6c38f30f7..d0959b56e 100644 --- a/src/Nazara/Core/File.cpp +++ b/src/Nazara/Core/File.cpp @@ -85,10 +85,10 @@ void NzFile::Close() bool NzFile::Delete() { - NazaraLock(m_mutex) - Close(); + NazaraLock(m_mutex) + 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) { - NazaraLock(m_mutex) - bool opened = IsOpen(); + Close(); + NazaraLock(m_mutex) + bool success = Rename(m_filePath, newFilePath); if (success) m_filePath = NormalizePath(newFilePath); @@ -283,10 +284,10 @@ bool NzFile::Rename(const NzString& newFilePath) bool NzFile::Open(unsigned long openMode) { - NazaraLock(m_mutex) - Close(); + NazaraLock(m_mutex) + if (m_filePath.IsEmpty()) return false; @@ -314,8 +315,6 @@ bool NzFile::Open(unsigned long openMode) bool NzFile::Open(const NzString& filePath, unsigned long openMode) { - NazaraLock(m_mutex) - Close(); SetFile(filePath); @@ -361,10 +360,10 @@ void NzFile::SetEndianness(nzEndianness endianness) bool NzFile::SetFile(const NzString& filePath) { - NazaraLock(m_mutex) - if (IsOpen()) { + NazaraLock(m_mutex) + if (filePath.IsEmpty()) 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) { - NazaraLock(m_mutex) - #if NAZARA_CORE_SAFE if (!IsOpen()) { @@ -462,6 +459,8 @@ std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int } #endif + NazaraLock(m_mutex) + if (!buffer || count == 0 || typeSize == 0) return 0; diff --git a/src/Nazara/Core/MemoryManager.cpp b/src/Nazara/Core/MemoryManager.cpp index a91133234..739c75d82 100644 --- a/src/Nazara/Core/MemoryManager.cpp +++ b/src/Nazara/Core/MemoryManager.cpp @@ -209,6 +209,7 @@ void NzMemoryManager::Initialize() #ifdef NAZARA_PLATFORM_WINDOWS InitializeCriticalSection(&s_mutex); + //#elif defined(NAZARA_PLATFORM_POSIX) is already done in the namespace #endif s_initialized = true; @@ -224,6 +225,8 @@ void NzMemoryManager::Uninitialize() { #ifdef NAZARA_PLATFORM_WINDOWS DeleteCriticalSection(&s_mutex); + #elif defined(NAZARA_PLATFORM_POSIX) + pthread_mutex_destroy(&s_mutex); #endif FILE* log = std::fopen(s_MLTFileName, "a"); diff --git a/src/Nazara/Core/Posix/ConditionVariableImpl.cpp b/src/Nazara/Core/Posix/ConditionVariableImpl.cpp index d75af776e..7a8ba8fc3 100644 --- a/src/Nazara/Core/Posix/ConditionVariableImpl.cpp +++ b/src/Nazara/Core/Posix/ConditionVariableImpl.cpp @@ -35,7 +35,7 @@ bool NzConditionVariableImpl::Wait(NzMutexImpl* mutex, nzUInt32 timeout) { // get the current time timeval tv; - gettimeofday(&tv, NULL); + gettimeofday(&tv, nullptr); // construct the time limit (current time + time to wait) timespec ti; diff --git a/src/Nazara/Core/Posix/DirectoryImpl.cpp b/src/Nazara/Core/Posix/DirectoryImpl.cpp index 50451edbe..9bd78e65f 100644 --- a/src/Nazara/Core/Posix/DirectoryImpl.cpp +++ b/src/Nazara/Core/Posix/DirectoryImpl.cpp @@ -82,14 +82,15 @@ bool NzDirectoryImpl::Exists(const NzString& dirPath) NzString NzDirectoryImpl::GetCurrent() { NzString currentPath; - char* path = new char[_PC_PATH_MAX]; + char* path = getcwd(nullptr, 0); - if (getcwd(path, _PC_PATH_MAX)) + if (path) + { currentPath = path; + free(path); + } else - NazaraError("Unable to get current directory: " + NzError::GetLastSystemError()); - - delete[] path; + NazaraError("Unable to get current directory: " + NzError::GetLastSystemError()); // Bug: initialisation -> if no path for log ! return currentPath; } diff --git a/src/Nazara/Core/Posix/MutexImpl.cpp b/src/Nazara/Core/Posix/MutexImpl.cpp index dee6078dc..0ed78092f 100644 --- a/src/Nazara/Core/Posix/MutexImpl.cpp +++ b/src/Nazara/Core/Posix/MutexImpl.cpp @@ -7,7 +7,7 @@ NzMutexImpl::NzMutexImpl() { - pthread_mutex_init(&m_handle, NULL); + pthread_mutex_init(&m_handle, nullptr); } NzMutexImpl::~NzMutexImpl() diff --git a/src/Nazara/Core/Posix/ThreadImpl.cpp b/src/Nazara/Core/Posix/ThreadImpl.cpp index c97abe19c..77099e3c0 100644 --- a/src/Nazara/Core/Posix/ThreadImpl.cpp +++ b/src/Nazara/Core/Posix/ThreadImpl.cpp @@ -57,9 +57,9 @@ void NzThreadImpl::Sleep(nzUInt32 time) // create a mutex and thread condition pthread_mutex_t mutex; - pthread_mutex_init(&mutex, 0); + pthread_mutex_init(&mutex, nullptr); pthread_cond_t condition; - pthread_cond_init(&condition, 0); + pthread_cond_init(&condition, nullptr); // wait... pthread_mutex_lock(&mutex); diff --git a/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp b/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp index f0a605d4a..4e1439c2d 100644 --- a/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp +++ b/src/Nazara/Core/Win32/TaskSchedulerImpl.cpp @@ -11,7 +11,7 @@ bool NzTaskSchedulerImpl::Initialize(unsigned int workerCount) { - if (s_workerCount > 0) + if (IsInitialized()) return true; // Déjà initialisé #if NAZARA_CORE_SAFE From 100952d0b11ddcb7f207a1c353f4423b0d67e9a0 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 2 May 2015 20:40:43 +0200 Subject: [PATCH 3/7] Core/ParameterList: Fixed typo Former-commit-id: b4e43b8072eebb74df1cc145968e80c1f449b3e0 --- src/Nazara/Core/ParameterList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nazara/Core/ParameterList.cpp b/src/Nazara/Core/ParameterList.cpp index 2bafb827f..3add83482 100644 --- a/src/Nazara/Core/ParameterList.cpp +++ b/src/Nazara/Core/ParameterList.cpp @@ -266,7 +266,7 @@ bool NzParameterList::GetUserdataParameter(const NzString& name, void** value) c } else { - NazaraError("Parameter value is not an userdata"); + NazaraError("Parameter value is not a userdata"); return false; } } From 4bbb02eadc53f7c4a3101689b9d6bc40bdb9c8b9 Mon Sep 17 00:00:00 2001 From: Youri Hubaut Date: Sun, 3 May 2015 16:15:29 +0200 Subject: [PATCH 4/7] Revert Former-commit-id: cb73baf4bb2a95b65e8439ee552f7ad85ede1008 --- src/Nazara/Core/File.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Nazara/Core/File.cpp b/src/Nazara/Core/File.cpp index d0959b56e..1acee0122 100644 --- a/src/Nazara/Core/File.cpp +++ b/src/Nazara/Core/File.cpp @@ -85,10 +85,10 @@ void NzFile::Close() bool NzFile::Delete() { - Close(); - NazaraLock(m_mutex) + Close(); + return Delete(m_filePath); } @@ -266,12 +266,11 @@ std::size_t NzFile::Read(void* buffer, std::size_t typeSize, unsigned int count) bool NzFile::Rename(const NzString& newFilePath) { - bool opened = IsOpen(); - - Close(); - NazaraLock(m_mutex) + bool opened = IsOpen(); + Close(); + bool success = Rename(m_filePath, newFilePath); if (success) m_filePath = NormalizePath(newFilePath); @@ -284,10 +283,10 @@ bool NzFile::Rename(const NzString& newFilePath) bool NzFile::Open(unsigned long openMode) { - Close(); - NazaraLock(m_mutex) + Close(); + if (m_filePath.IsEmpty()) return false; @@ -315,6 +314,8 @@ bool NzFile::Open(unsigned long openMode) bool NzFile::Open(const NzString& filePath, unsigned long openMode) { + NazaraLock(m_mutex) + Close(); SetFile(filePath); @@ -360,10 +361,10 @@ void NzFile::SetEndianness(nzEndianness endianness) bool NzFile::SetFile(const NzString& filePath) { + NazaraLock(m_mutex) + if (IsOpen()) { - NazaraLock(m_mutex) - if (filePath.IsEmpty()) return false; @@ -445,6 +446,8 @@ bool NzFile::Write(const NzString& string) std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int count) { + NazaraLock(m_mutex) + #if NAZARA_CORE_SAFE if (!IsOpen()) { @@ -459,8 +462,6 @@ std::size_t NzFile::Write(const void* buffer, std::size_t typeSize, unsigned int } #endif - NazaraLock(m_mutex) - if (!buffer || count == 0 || typeSize == 0) return 0; @@ -732,7 +733,7 @@ bool NzFile::FillHash(NzAbstractHash* hash) const unsigned int size; while (remainingSize > 0) { - size = std::min(remainingSize, static_cast(NAZARA_CORE_FILE_BUFFERSIZE)); + size = static_cast(std::min(remainingSize, static_cast(NAZARA_CORE_FILE_BUFFERSIZE))); if (file.Read(&buffer[0], sizeof(char), size) != sizeof(char)*size) { NazaraError("Unable to read file"); From 7b2e6bb3f2a113a5a59e15defd8cf5f0aeceeb0d Mon Sep 17 00:00:00 2001 From: Youri Hubaut Date: Sun, 3 May 2015 16:15:48 +0200 Subject: [PATCH 5/7] NzMutex is now a recursive mutex Former-commit-id: c36c5543dfb8f79a6b961ef6c97aa9f647c93e57 --- src/Nazara/Core/Posix/MutexImpl.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Nazara/Core/Posix/MutexImpl.cpp b/src/Nazara/Core/Posix/MutexImpl.cpp index 0ed78092f..c53ad61ff 100644 --- a/src/Nazara/Core/Posix/MutexImpl.cpp +++ b/src/Nazara/Core/Posix/MutexImpl.cpp @@ -7,7 +7,11 @@ NzMutexImpl::NzMutexImpl() { - pthread_mutex_init(&m_handle, nullptr); + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + + pthread_mutex_init(&m_handle, &attr); } NzMutexImpl::~NzMutexImpl() From 4b43cc2d59286d1180deece9002daf664857b4d5 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 3 May 2015 18:07:57 +0200 Subject: [PATCH 6/7] Core/MemoryManager: Made NextFree thread-safe Former-commit-id: e87a05254538b265761f836a35b1f00474fbf3c7 --- src/Nazara/Core/MemoryManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nazara/Core/MemoryManager.cpp b/src/Nazara/Core/MemoryManager.cpp index 8b7acfee9..651437b95 100644 --- a/src/Nazara/Core/MemoryManager.cpp +++ b/src/Nazara/Core/MemoryManager.cpp @@ -33,8 +33,8 @@ namespace bool s_initialized = false; const unsigned int s_magic = 0xDEADB33FUL; const char* s_logFileName = "NazaraMemory.log"; - const char* s_nextFreeFile = "(Internal error)"; - unsigned int s_nextFreeLine = 0; + thread_local const char* s_nextFreeFile = "(Internal error)"; + thread_local unsigned int s_nextFreeLine = 0; Block s_list = {