Qt 6.8.3 with BlackBerry 10 (QNX 8 / ARMv7) patches
 
 
 
 
 
 
Go to file
Alexander Kartashov d08e3b6de1 QMutex: order reads from QMutexPrivate::waiters and QBasicMutex::d_ptr in QBasicMutex::lockInternal()
Threads that unlock and lock a mutex at the same time perform the following
operations:

Thread 1                               Thread 2
--------                               --------

 QBasicMutex::lockInternal()            QBasicMutex::unlockInternal()

  d_ptr.testAndSetOrdered(..., d)        d = d_ptr.loadAcquire()

  d->waiters.loadRelaxed();         (1)
                                         d->waiters.fetchAndAddRelease() (2)
                                         d_ptr.testAndSetRelease(d, 0)   (3)
                                         d->derefWaiters()               (4)
  d->waiters.testAndSetRelaxed(...) (5)
  if (d != d_ptr.loadAcquire())     (6)

  d->wait()

The operation (1) isn't serialized with the operation (6) so its memory
effect may be observed before the effect of the operation (1). However,
if memory effects are observed in the following order: (6) -> (1) -> (2)
-> (3) -> (4) -> (5) then Thread 1 doesn't notice that Thread 2 updates
d_ptr and goes to sleep with d pointing to a stale object, this object
isn't reachable since d_ptr is zeroed so Thread 1 cannot be woken up.

The patch adds the "acquire" barrier into the operation (1) so that it
cannot be reordered with the operation (6).

Fixes: QTBUG-88247
Pick-to: 5.15 5.12
Change-Id: I1d0c405c0bf5080ec1815d351b9b4b75efeab21a
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-12 02:57:25 +00:00
.github/workflows GitHub Actions: Fix workflow file 2020-09-11 13:37:48 +02:00
bin CMake: Fix argument passing for configure.bat / qt-configure-module.bat 2020-10-30 08:22:30 +01:00
cmake MSVC: enable identical COMDAT folding for release builds 2020-11-12 03:51:04 +08:00
coin CMake: Provide a qt-internal-configure-tests script 2020-10-26 15:23:25 +01:00
config.tests CMake: Skip regeneration of manual compile test project 2020-04-09 11:26:46 +02:00
dist Remove last remainings of Qt Quick 1 imports 2020-05-25 11:48:12 +02:00
doc Doc: Add macro to exclude examples from Creator 2020-10-27 11:49:39 +00:00
examples Support the markdown underline extension 2020-11-07 09:35:11 +01:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
mkspecs MSVC: enable identical COMDAT folding for release builds 2020-11-12 03:51:04 +08:00
qmake Build Qt (and client apps using it) with /permissive- 2020-11-10 20:01:49 +01:00
src QMutex: order reads from QMutexPrivate::waiters and QBasicMutex::d_ptr in QBasicMutex::lockInternal() 2020-11-12 02:57:25 +00:00
tests Fix misidentification of some shearing QTransforms as only rotating 2020-11-11 12:48:21 +01:00
util pro2cmake.py: support for PAST_MAJOR_VERSIONS in qml_modules 2020-11-11 20:50:58 +01:00
.cmake.conf CMake: Bump the minimum required CMake version to build Qt to 3.18 2020-11-03 13:06:14 +01:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore .gitignore: Qt Creator files cleanup 2020-09-25 07:50:15 +02:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.prev_configure.cmake CMake: Fix detection of the ltcg feature 2020-11-06 22:03:50 +01:00
.prev_qt_cmdline.cmake CMake: Regenerate configure.cmake files 2020-09-28 15:48:17 +02:00
.qmake.conf Bump version 2019-12-17 12:41:31 +01:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
CMakeLists.txt CMake: Bump the minimum required CMake version to build Qt to 3.18 2020-11-03 13:06:14 +01:00
INSTALL INSTALL: Remove outdated reference to Windows CE 2019-02-13 13:01:57 +00:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.GPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPLv3 Remove LICENSE.GPLv3, LICENSE.LGPLv21, LGPL_EXCEPTION.txt 2018-04-16 11:02:14 +00:00
LICENSE.QT-LICENSE-AGREEMENT Update enterprise license agreement v4.2.1 2019-12-18 13:07:19 +02:00
config_help.txt CMake: Implement configure -list-features 2020-11-10 16:53:31 +01:00
configure configure: Fix call without options 2020-11-07 19:33:37 +01:00
configure.bat CMake: Fix Windows top-level configure.bat 2020-11-03 13:06:14 +01:00
configure.cmake CMake: Fix detection of the ltcg feature 2020-11-06 22:03:50 +01:00
configure.json By default don't try to use pkg-config when targeting Android 2020-09-28 15:48:17 +02:00
configure.pri Android: allow setting javac build version from the configure script 2020-09-16 20:55:08 +03:00
dependencies.yaml Re-add dependencies.yaml now that qt5.git wip/qt6 builds fine 2019-09-18 13:19:31 +02:00
qt_cmdline.cmake CMake: Fixup outdated configure.cmake files 2020-11-10 14:23:09 +01:00
qtbase.pro Update qmake before building src 2020-08-19 18:25:51 +02:00
sync.profile Generate QUtf8StringView header file from qutf8stringview.h 2020-11-07 08:35:11 +00:00