[RTEMS Project] #3334: deadlock in _once()
RTEMS trac
trac at rtems.org
Tue Mar 13 13:17:56 UTC 2018
#3334: deadlock in _once()
-----------------------------+--------------------
Reporter: Stavros Passas | Owner: (none)
Type: defect | Status: new
Priority: normal | Milestone: 4.11.4
Component: posix | Version: 4.11
Severity: normal | Keywords:
Blocked By: | Blocking:
-----------------------------+--------------------
RTEMS threads getting locked up when using certain c++ functionality.
Issue happens for example when std::future is combined with std::async.
Investigating deeper, seems like this happens if std::async executes
before std::future gets scheduled to run. Both of these create a
pthread_once instance.
_once() uses a common semaphore for all calls, thus the first function
(async.get usually) gets the lock, calls its “init” function (which blocks
until the second function has completed. After this, std::future also uses
pthread_once to execute, but because the lock is already taken, it also
blocks, casing a deadlock.
Attached you can find a test application that reproduces the deadlock.
--
Ticket URL: <http://devel.rtems.org/ticket/3334>
RTEMS Project <http://www.rtems.org/>
RTEMS Project
More information about the bugs
mailing list