aboutsummaryrefslogtreecommitdiff
path: root/src/threading (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Fix synchronization issue at thread startsfan52022-05-021-3/+3
| | | | | | | | | | 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
* Remove Thread::kill() and related unittest (#10317)Sebastien Marie2020-09-102-40/+22
| | | | Closes: #6065
* Add NetBSD cpu affinity support code (#10378)David CARLIER2020-09-091-0/+9
|
* NetBSD build fix proposal. (#10308)David CARLIER2020-08-251-1/+1
| | | Fixing thread naming call and let the class setting RANDOM_MIN/RANDOM_MAX.
* Complete Haiku platform support. (#10311)David CARLIER2020-08-232-0/+8
| | | | | Fixing linkage/libraries missing issue. Implements missing platform specifics.
* Optimize semaphore wait with zero timeout on POSIXsfan52019-11-141-11/+16
|
* DragonFly BSD is somewhat identical to FreeBSD (#8159)Leonid Bobrov2019-02-031-3/+3
|
* Fix 5 issues reported by PVS studioLoic Blot2018-04-041-1/+1
| | | | | | | | * 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.
* Thread: fix a crash on Windows due to data race condition on ↵Loïc Blot2017-10-101-2/+6
| | | | Thread::m_start_finished_mutex (#6515)
* Code modernization: subfolders (#6283)Loïc Blot2017-08-191-2/+2
| | | | | | | | | | | | | * 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
* C++ modernize: Pragma once (#6264)Loïc Blot2017-08-172-8/+2
| | | | * Migrate cpp headers to pragma once
* Fix msvc annoyances (#5963)adrido2017-06-271-2/+10
| | | | | | | | | | | | | | | | | | | | * 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
* C++11 cleanup on constructors (#6000)Vincent Glize2017-06-192-6/+4
| | | | * C++11 cleanup on constructors dir script
* Remove threads.h and replace its definitions with their C++11 equivalents ↵ShadowNinja2017-06-114-17/+14
| | | | | | (#5957) This also changes threadProc's signature, since C++11 supports arbitrary thread function signatures.
* C++11 patchset 5: use std::threads and remove old compat layer (#5928)Loïc Blot2017-06-082-132/+6
| | | | | | | * 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
* Use C++11 mutexes only (remove compat code) (#5922)Loïc Blot2017-06-067-305/+9
| | | | * Fix event LINT & remove default constructor/destructors * remove compat code & modernize autolock header
* C++11 patchset 3: remove Atomic/GenericAtomic and use std::atomic (#5906)Loïc Blot2017-06-062-142/+4
|
* Fix uninitalised variable in event.cpp (#5764)Zeno-2017-05-151-0/+2
|
* Pass clang-format on 14 trivial header files fixesLoic Blot2017-04-072-12/+12
| | | | Also remove them from whitelist
* Fix AIX threading buildShadowNinja2017-01-281-1/+1
|
* Fix synchronization issue at thread startShadowNinja2017-01-284-0/+27
| | | | | | | | | | | | | | | | 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.
* Fix C++11 Windows build of threading codesfan52016-10-067-56/+48
| | | | | | | 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.
* Fix & make linux conditionals uniform (#4278)Rogier-52016-07-041-4/+4
| | | | | | | | 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.
* Fix Windows buildCraig Robbins2016-05-021-1/+1
| | | | | Fixes the issue introduced by c1a0ebb (Fix use of uninitialised variable in class Event) causing Windows builds to fail
* Fix use of uninitialised variable in class EventCraig Robbins2016-05-012-4/+7
|
* Fix POSIX C++11 buildShadowNinja2016-04-301-9/+9
| | | | I broke this in 46fd114e9a4e05b74576dce682e24357363298e7.
* Fix prepreprocessor error in thread.h (related to C++11 threads)Craig Robbins2016-04-301-4/+4
|
* Fix race on thread creationShadowNinja2016-04-282-13/+17
| | | | This often broke the threading tests on OSX.
* Fix C++11 compilabilityest312016-01-234-2/+40
| | | | Previous commits broke it... :(
* Fix events on WindowsBlockMen2015-12-112-11/+4
|
* Fix Event implementationShadowNinja2015-12-073-13/+121
| | | | | | On non-windows platforms this just used a semaphore, which meant that multiple calls to signal() would result in wait() returning multiple times.
* Fix misc. MinGW and Valgrind warningskwolekr2015-11-081-1/+2
|
* Time: use locks againest312015-11-041-20/+44
| | | | | | | | | | | | | | | 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.
* Atomic: cleanup and add more operationsest312015-11-031-35/+54
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Rename and move basicmacros.h to util/basic_macros.hest312015-11-023-3/+3
|
* Fix Lua scripting synchronizationkwolekr2015-11-012-4/+14
| | | | | | | 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.
* Fix C++11 compatibilitykwolekr2015-10-312-3/+4
|
* Add DISABLE_CLASS_COPY macro (and use it)kwolekr2015-10-273-0/+7
| | | | | | | | | 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.
* Fix some threading things and add additional thread unittestskwolekr2015-10-242-48/+33
| | | | | | - Fix thread name reset on start() - Fully reset thread state on kill() - Add unittests to check for correct object states under various circumstances
* Fix == to =Rui2015-10-171-1/+1
|
* Fix missing include on AIXkwolekr2015-10-171-1/+4
|
* Refactor Thread class to improve readability and portabilitykwolekr2015-10-162-203/+348
| | | | | | | | | - 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
* Refactor loggingShadowNinja2015-10-141-2/+2
| | | | | | | | | - 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
* Fix MinGW 32-bit buildShadowNinja2015-10-031-0/+1
|
* Fix building on OSX, broken since "Clean up threading"Pavel Puchkin2015-09-061-1/+1
| | | | | | | | | | | | Commit e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd - Clean up threading by @ShadowNinja has broken the OSX build. Including things inside a namespace isn't good. Also fixes #3124.
* Clean up threadingShadowNinja2015-08-2310-0/+1044
* 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.