Go to file
Thiago Macieira af95ec4b7b QApplicationStatic: enforce acquire-release semantics on creation
On systems with weak memory ordering, it was possible for the
storeRelaxed(Initialized) to be observed by another thread performing a
loadRelaxed() without observing the contents of the object itself. The
mutex *does* release the contents of the object to memory, but without
the corresponding mutex acquisition, we couldn't guarantee that the
object's contents would be observed. Now we can.

We don't need to fix the load inside the mutex because the mutex will
have acquired everything from either a previous call to pointer() or to
reset(). The store inside reset() need not be storeRelease() either
because the effect of observing the Uninitialized state will be to lock
the mutex.

None of this is used to protect the data as it is being mutated by the
user in multiple threads, or their access simultaneously with reset()
(which is why the load outside the mutex was removed).

Thanks to litb on Slack for noticing this and bringing to my attention.

Pick-to: 6.5
Change-Id: Idd5e1bb52be047d7b4fffffd1752df5b4d9b2e3f
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2023-04-26 16:40:31 -07:00
.github/workflows Repair github action workflow 2021-11-10 18:57:33 +01:00
bin Add simple project generation based on existing source files 2023-02-08 12:59:19 +01:00
cmake CMake: Fully rebuild dirty configure-time executables 2023-04-26 20:09:38 +02:00
coin COIN: Add initial set of Debian packaging instructions 2023-04-19 17:11:34 +03:00
config.tests Rid of 'special case' markers 2023-04-13 18:30:58 +02:00
dist Add Qt 6.0.0 changes file 2020-11-16 10:02:08 +02:00
doc Rid of 'special case' markers 2023-04-13 18:30:58 +02:00
examples Rework imagescaling example to avoid potential crashes 2023-04-26 19:27:30 +02:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
libexec Pass native path in qt-internal-configure-tests 2023-04-17 23:32:34 +02:00
LICENSES Clarify license of SHA-1 algorithm 2023-04-26 16:36:18 +02:00
mkspecs qmake: Fix infinite make loop if RESOURCES contains nonexistent .qrc 2023-04-17 23:32:34 +02:00
qmake qmake: Don't add dummy empty.lproj localization to macOS bundles 2023-04-20 20:11:02 +02:00
src QApplicationStatic: enforce acquire-release semantics on creation 2023-04-26 16:40:31 -07:00
tests Simplify the creation of APIs that take a callback 2023-04-26 22:06:31 +02:00
util Pack languageCodeList tighter 2023-03-15 19:48:30 +01:00
.cmake.conf Centralize copyright information for Qt 2023-03-20 13:03:44 +01:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore git: ignore ._* files 2023-03-28 10:44:57 +02:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
CMakeLists.txt Introduce the qt_internal_project_setup macro 2023-04-24 14:20:25 +02:00
conanfile.py Conan: Do not force 'qt_host_path' usage in cross-build context 2022-06-22 18:18:42 +03:00
config_help.txt SQL plugins: add mimer to the help text 2023-04-18 05:32:34 +08:00
configure Retrieve an old -redo behavior 2023-02-07 18:51:58 +00:00
configure.bat Retrieve an old -redo behavior 2023-02-07 18:51:58 +00:00
configure.cmake Rid of 'special case' markers 2023-04-13 18:30:58 +02: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 Rid of 'special case' markers 2023-04-13 18:30:58 +02:00
sync.profile Fix capitalization error in auto-generated qdbusmacros.h include 2023-04-26 13:47:43 +00:00