Go to file
Sona Kurazyan 9e61cc4f72 Fix crash when cancelling a QFuture that has continuation with context
To support cancellation of continuations attached via the parent future,
we store a pointer to continuation future's data in parent. This
requires preserving the lifetime of continuation future's data while the
parent is still alive (see 24dedaeaa1).
This is achieved by capturing the promise in the continuation's lambda,
which is only cleaned up after the parent's data is destroyed. This is
already the case for continuations without context, but was overlooked
for continuations with context: they transfer the ownership of the
continuation promise to lambda passed to QMetaObject::invokeMethod(),
which destroys the lambda's context after it's run. As a result, the
continuation's promise (and data, if there are no other copies of it)
is also destroyed, leaving the parent pointing to deleted continuation
data.

To fix this, capture a copy of continuation future's ref-counted data in
the continuation's lambda. This will guarantee that the continuation
data remains alive until the parent is destroyed and the continuation
is cleaned up.

Fixes: QTBUG-108790
Pick-to: 6.5 6.4 6.2
Change-Id: Ief4b37f31e652988d13b03499505ac65c7889226
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-01-06 14:00:56 +00:00
.github/workflows Repair github action workflow 2021-11-10 18:57:33 +01:00
bin Return qt-configure-module to bin/ 2022-12-13 10:02:25 +00:00
cmake Only set the deprecation define once for test batch 2023-01-06 12:37:35 +01:00
coin Return qt-configure-module to bin/ 2022-12-13 10:02:25 +00:00
config.tests Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
dist Add Qt 6.0.0 changes file 2020-11-16 10:02:08 +02:00
doc Doc: Add margins to all anchors in a translated page 2022-12-12 14:14:22 +00:00
examples Link update for Data Input Output in the save game example 2023-01-05 15:22:00 +01:00
lib
libexec Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
LICENSES Add license text file for Creative Commons Zero (CC0) 1.0 2022-10-19 12:06:09 +02:00
mkspecs wasm: Flesh out side module and main module logic for shared builds 2023-01-02 14:50:51 +01:00
qmake qmake: Document that QMAKE_PRE_LINK does not work with Xcode 2022-12-15 20:23:28 +01:00
src Fix crash when cancelling a QFuture that has continuation with context 2023-01-06 14:00:56 +00:00
tests Fix crash when cancelling a QFuture that has continuation with context 2023-01-06 14:00:56 +00:00
util Bump version to 6.6.0 2022-12-14 20:19:01 +02:00
.cmake.conf Enable QT_NO_AS_CONST globally 2023-01-05 15:09:49 +01:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore Assume qhelpgenerator in libexec instead of bin 2021-11-08 19:27:32 +01:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.tag
CMakeLists.txt Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +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 Update -redo option such that it removes CMakeCache.txt and CMakeFiles/ 2022-12-01 02:23:51 +01:00
configure Update -redo option such that it removes CMakeCache.txt and CMakeFiles/ 2022-12-01 02:23:51 +01:00
configure.bat Update -redo option such that it removes CMakeCache.txt and CMakeFiles/ 2022-12-01 02:23:51 +01:00
configure.cmake wasm: fix up new configure options 2022-12-28 15:57:48 +00:00
dependencies.yaml
qt_cmdline.cmake QCryptographicHash: implement OpenSSL 3.0 support 2022-09-26 17:26:37 +02:00
sync.profile Move qurltlds_p.h out of src/network, and make it a .cpp file 2022-10-01 06:24:51 +00:00