aboutsummaryrefslogtreecommitdiff
path: root/src/threading
AgeCommit message (Collapse)Author
2022-05-02Fix synchronization issue at thread startsfan5
If a newly started thread immediately exits then m_running would immediately be set to false again and the caller would be stuck waiting for m_running to become true forever. Since a mutex for synchronizing startup already exists we can simply move the while loop into it. see also: #5134 which introduced m_start_finished_mutex
2020-09-10Remove Thread::kill() and related unittest (#10317)Sebastien Marie
Closes: #6065
2020-09-09Add NetBSD cpu affinity support code (#10378)David CARLIER
2020-08-25NetBSD build fix proposal. (#10308)David CARLIER
Fixing thread naming call and let the class setting RANDOM_MIN/RANDOM_MAX.
2020-08-23Complete Haiku platform support. (#10311)David CARLIER
Fixing linkage/libraries missing issue. Implements missing platform specifics.
2019-11-14Optimize semaphore wait with zero timeout on POSIXsfan5
2019-02-03DragonFly BSD is somewhat identical to FreeBSD (#8159)Leonid Bobrov
2018-04-04Fix 5 issues reported by PVS studioLoic Blot
* src/sky.cpp 146 warn V519 The 'suncolor_f.r' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 142, 146. * src/sky.cpp 147 warn V519 The 'suncolor_f.g' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 143, 147. * src/sky.cpp 148 warn V519 The 'suncolor_f.b' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 144, 148. * src/threading/thread.cpp 63 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_thread_obj. * src/server.cpp 3243 err V595 The 'log' pointer was utilized before it was verified against nullptr. Check lines: 3243, 3258.
2017-10-10Thread: fix a crash on Windows due to data race condition on ↵Loïc Blot
Thread::m_start_finished_mutex (#6515)
2017-08-19Code modernization: subfolders (#6283)Loïc Blot
* Code modernization: subfolders Modernize various code on subfolders client, network, script, threading, unittests, util * empty function * default constructor/destructor * for range-based loops * use emplace_back instead of push_back * C++ STL header style * Make connection.cpp readable in a pointed place + typo
2017-08-17C++ modernize: Pragma once (#6264)Loïc Blot
* Migrate cpp headers to pragma once
2017-06-27Fix msvc annoyances (#5963)adrido
* MSVC: Fix '/std:c++11' is not a valid compiler option * MSVC/MINGW: Define 'WIN32_LEAN_AND_MEAN' for the whole project In some obscure cases 'Windows.h" got includet before that definition, which leaded to compilation warnings+errors * MSVC: '/arch:SSE' is only available for x86 * MSVC: Fix float conversation * MSVC/MINGW: use winthreads on Windows * MSVC: 'USE_CMAKE_CONFIG' might be already definied by CMake build system * MSVC: Use all available cpu cores for compiling * Add missing include ctime and use std::time_t
2017-06-19C++11 cleanup on constructors (#6000)Vincent Glize
* C++11 cleanup on constructors dir script
2017-06-11Remove threads.h and replace its definitions with their C++11 equivalents ↵ShadowNinja
(#5957) This also changes threadProc's signature, since C++11 supports arbitrary thread function signatures.
2017-06-08C++11 patchset 5: use std::threads and remove old compat layer (#5928)Loïc Blot
* C++11 patchset 5: use std::threads and remove old compat layer * use pragma once in modified headers * use C++11 function delete for object copy
2017-06-06Use C++11 mutexes only (remove compat code) (#5922)Loïc Blot
* Fix event LINT & remove default constructor/destructors * remove compat code & modernize autolock header
2017-06-06C++11 patchset 3: remove Atomic/GenericAtomic and use std::atomic (#5906)Loïc Blot
2017-05-15Fix uninitalised variable in event.cpp (#5764)Zeno-
2017-04-07Pass clang-format on 14 trivial header files fixesLoic Blot
Also remove them from whitelist
2017-01-28Fix AIX threading buildShadowNinja
2017-01-28Fix synchronization issue at thread startShadowNinja
If a newly spawned thread called getThreadId or getThreadHandle before the spawning thread finished saving the thread handle, then the handle/id would be used uninitialized. This would cause the threading tests to fail since isCurrentThread would return false, and if Minetest is built with C++11 support the std::thread object pointer would be dereferenced while ininitialized, causing a segmentation fault. This fixes the issue by using a mutex to force the spawned thread to wait for the spawning thread to finish initializing the thread object. An alternative way to handle this would be to also set the thread handle/id in the started thread but this wouldn't work for C++11 builds because there's no way to get the partially constructed object.
2016-10-06Fix C++11 Windows build of threading codesfan5
The initial problem was that mutex_auto_lock.h tries to use std::unique_lock<std::mutex> despite mutex.h not using C++11's std::mutex on Windows. The problem here is the mismatch between C++11 usage conditions of the two headers. This commit moves the decision logic to threads.h and makes sure mutex.h, mutex_auto_lock.h and event.h all use the same features.
2016-07-04Fix & make linux conditionals uniform (#4278)Rogier-5
The source used a hodge-podge of different combinations of different macros to check for linux: 'linux', '__linux', '__linux__'. As '__linux__' is standard (Posix), and the others are not, the source now uniformly uses __linux__. If either linux or __linux are defined, it is made sure that __linux__ is defined as well.
2016-05-02Fix Windows buildCraig Robbins
Fixes the issue introduced by c1a0ebb (Fix use of uninitialised variable in class Event) causing Windows builds to fail
2016-05-01Fix use of uninitialised variable in class EventCraig Robbins
2016-04-30Fix POSIX C++11 buildShadowNinja
I broke this in 46fd114e9a4e05b74576dce682e24357363298e7.
2016-04-30Fix prepreprocessor error in thread.h (related to C++11 threads)Craig Robbins
2016-04-28Fix race on thread creationShadowNinja
This often broke the threading tests on OSX.
2016-01-23Fix C++11 compilabilityest31
Previous commits broke it... :(
2015-12-11Fix events on WindowsBlockMen
2015-12-07Fix Event implementationShadowNinja
On non-windows platforms this just used a semaphore, which meant that multiple calls to signal() would result in wait() returning multiple times.
2015-11-08Fix misc. MinGW and Valgrind warningskwolekr
2015-11-04Time: use locks againest31
The Atomic implementation was only partially correct, and was very complex. Use locks for sake of simplicity, following KISS principle. Only remaining atomic operation use is time of day speed, because that really is only read + written. Also fixes a bug with m_time_conversion_skew only being decremented, never incremented (Regresion from previous commit). atomic.h changes: * Add GenericAtomic<T> class for non-integral types like floats. * Remove some last remainders from atomic.h of the volatile use.
2015-11-03Atomic: cleanup and add more operationsest31
Cleanup: * Remove volatile keyword, it is of no use at all. [1] * Remove the enable_if stuff. It had no use either. The most likely explanation why the enable_if stuff was there is that it was used as something like a STATIC_ASSERT to verify that sizeof(T) is not larger than sizeof(void *). This check however is not just misplaced in a place where we already use a lock, it isn't needed at all, as gcc will just generate a call to to the runtime if it compiles for platforms that don't support atomic instructions. The runtime will then most likely use locks. Code style fixes: * Prefix name of the mutex * Line everything up nicely, where it makes things look nice * Filling \ continuations with spaces is code style rule Added operations on the atomic var: * Compare and swap * Swap The second point of the cleanup also fixes the Android build of the next commit. [1]: http://stackoverflow.com/q/2484980
2015-11-02Rename and move basicmacros.h to util/basic_macros.hest31
2015-11-01Fix Lua scripting synchronizationkwolekr
For several years now, the lua script lock has been completely broken. This commit fixes the main issue (creation of a temporary rather than scoped object), and fixes a subsequent deadlock issue caused by nested script API calls by adding support for recursive mutexes.
2015-10-31Fix C++11 compatibilitykwolekr
2015-10-27Add DISABLE_CLASS_COPY macro (and use it)kwolekr
Use this macro to disallow copying of an object using the assignment operator or copy constructor. This catches otherwise silent-but-deadly mistakes such as "ServerMap map = env->getMap();" at compile time. If so desired, it is still possible to copy a class, but it now requires an explicit call to memcpy or std::copy.
2015-10-24Fix some threading things and add additional thread unittestskwolekr
- Fix thread name reset on start() - Fully reset thread state on kill() - Add unittests to check for correct object states under various circumstances
2015-10-17Fix == to =Rui
2015-10-17Fix missing include on AIXkwolekr
2015-10-16Refactor Thread class to improve readability and portabilitykwolekr
- Fix some incompatibilities with obscure platforms (AIX and WinCE) - Clean up Thread class interface - Add m_ prefix to private member variables - Simplify platform-dependent logic, reducing preprocessor conditional clauses and improving readibility - Add Thread class documentation
2015-10-14Refactor loggingShadowNinja
- Add warning log level - Change debug_log_level setting to enumeration string - Map Irrlicht log events to MT log events - Encapsulate log_* functions and global variables into a class, Logger - Unify dstream with standard logging mechanism - Unify core.debug() with standard core.log() script API
2015-10-03Fix MinGW 32-bit buildShadowNinja
2015-09-06Fix building on OSX, broken since "Clean up threading"Pavel Puchkin
Commit e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd - Clean up threading by @ShadowNinja has broken the OSX build. Including things inside a namespace isn't good. Also fixes #3124.
2015-08-23Clean up threadingShadowNinja
* Rename everything. * Strip J prefix. * Change UpperCamelCase functions to lowerCamelCase. * Remove global (!) semaphore count mutex on OSX. * Remove semaphore count getter (unused, unsafe, depended on internal API functions on Windows, and used a hack on OSX). * Add `Atomic<type>`. * Make `Thread` handle thread names. * Add support for C++11 multi-threading. * Combine pthread and win32 sources. * Remove `ThreadStarted` (unused, unneeded). * Move some includes from the headers to the sources. * Move all of `Event` into its header (allows inlining with no new includes). * Make `Event` use `Semaphore` (except on Windows). * Move some porting functions into `Thread`. * Integrate logging with `Thread`. * Add threading test.