qt6-bb10/tests/auto
Marc Mutz ca216b7bed QDuplicateTracker: shed memory_resource on clear()
The pmr::monotonic_buffer_resource ("pmr::mbr") strategy can only
allocate buffers; deallocation is a no-op. I chose it for
QDuplicateTracker because the tool was only used one-off: build it,
then destroy it. There were no other operations.

That changed when 090c7e3262 added
clear().

Calling pmr::unordered_set::clear() will deallocate the nodes (but not
the bucket array), but due to pmr::mbr, nothing is actually
deallocated, so memory that was freed by the container isn't actually
reused by it, later. IOW: repeated grow-clear-grow-clear cycles would
forever grow the monotonic_muffer_resource, using more and more memory
and thus appear to be leaking it.

This isn't exactly optimal behavior, so try to shed the pmr::mbr's
extra memory with a call to mbr::release().

Unfortunately, C++17 originally failed to nail down the semantics of
pmr::mbr::release(), prompting LWG 3120 in response to observed
implementation divergence. In particular, MSSTL, at the time of LWG
3120 filing, didn't appear to allow to allocate() after release(). In
our tests, it does allow it, it just never falls back to the original
(stack) buffer, and, looking at the implementation, it doesn't look
like it can do so anytime soon (it doesn't remember the buffer, and
everything is inline, so they would seem to need a BC break to fix it.

We tried to work-around the problem by hard-resetting 'res' by going
through a destroy-recreate cycle. pmr::mbr is neither copy- nor
move-constructible, so that blunt instrument is, unfortunately,
necessary (std::optional would be an alternative, but has overhead
that affects all platforms). This crashed, though, so just call
release() and handle MSSTL's failure to reuse the initial buffer as a
QoI issue.

For all platforms, before release(), we also need to make sure that
`set` no longer holds any references into it, and, since clear()
doesn't shed capacity, we need to use the C++11 version of the
swap-trick (swap is actually UB here, because the allocators differ):
move-assign a default-constructed set.

Amends 090c7e3262.

Fixes: QTBUG-132945
Pick-to: 6.5 6.2
Change-Id: I4796806e427602255439dcb1518aa9b661c7933e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 9f4325e67354ce6c4c98e7a206f17729b378dc04)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit d2c4f6df21629495ce6fe32653037b35a989d6f4)
2025-01-31 14:06:20 +00:00
..
bic/data Add 6.8.0 binary compatibility file 2024-10-17 19:30:33 +00:00
cmake _qt_internal_process_resource: Properly escape XML 2025-01-25 14:21:36 +00:00
concurrent QtConcurrent: fix support for callables with deduced return type 2025-01-06 17:09:37 +00:00
corelib QDuplicateTracker: shed memory_resource on clear() 2025-01-31 14:06:20 +00:00
dbus QtDBus: disallow sending method calls without destinations on a bus 2024-10-22 07:17:08 +00:00
gui QOpenGlContext: Always unset current context in doneCurrent() 2025-01-25 14:21:31 +00:00
guiapplauncher Convert "Color Editor Factory" Example to snippets 2024-04-19 13:39:41 +02:00
network QTestLib: Add helper function to check for keychain access issues 2025-01-25 14:21:22 +00:00
opengl tests: Remove remains of qmake conversion from CMakeLists.txt files 2023-02-17 21:56:49 +01:00
other Fix tst_gestures flakiness on XCB 2024-11-14 17:45:35 +00:00
printsupport tests: blacklist tst_QPrinter::testPrintPreviewDialog() 2024-08-12 09:43:38 +00:00
shared Introduce flag to use typographical line metrics for fonts 2024-05-31 19:30:53 +02:00
sql Tests: Reduce the number of module includes 2024-11-04 19:42:27 +00:00
testlib De-duplicate the disabling of crash dialogs in our unit tests 2025-01-20 21:30:42 +00:00
tools Bump version to 6.8.3 2025-01-23 11:04:42 +00:00
wasm wasm: Fix focus handling 2024-11-27 06:47:13 +00:00
widgets Android: Unblacklist testQuickSelectionWithMouse test from tst_QLineEdit 2025-01-25 15:26:51 +00:00
xml QDomDocument::toByteArray() crashed in case of high XML nesting level 2024-12-06 11:53:53 +01:00
CMakeLists.txt tst_QSettings: port to QTEST_THROW_ON_FAIL 2024-06-27 06:06:02 +00:00
network-settings.h Change license for tests files 2024-02-04 09:56:42 +01:00