summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread/qthreadpool.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Mark all files in corelib/thread security significantMatthias Rauter2025-08-041-0/+1
| | | | | | | | | | | | | | | None of the files in this folder handle untrusted inputs, implement a protocol or cryptographic logic or execute external code. While bugs in threading, atomics, and locks might lead to security issues, there is no elevated risk and exposure of these classes and methods. Therefore they are marked significant. Pick-to: 6.10 6.9 6.8 Fixes: QTBUG-135196 Change-Id: If336b6f8a920b3d41b4c4e57f1bff36e2b392739 Reviewed-by: Dimitrios Apostolou <jimis@qt.io> Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Long live \constraints!Marc Mutz2025-02-281-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We have divergence in the way we document function, operator and constructor constraints. About half use \note, while the other doesn't. Some say "if and only if" while others say just "participates only if". So add a qdoc macro, \constraints, to semantically mark up these constraints. It expands to a section titled `Constraints`, and uses a predefined sentence (prefix) for constraints. Documentation for constraints is moved to the end of the comment blocks to separate them from the rest of the text. Apply them to all the standard-ish constraint documentation blocks (grepped for "participate"). I didn't look for other, one-off, ways documentation authors may have documented constraints, but I'm also not aware of any. Re-wrap lines only if the result fits into a single line. As a drive-by, drop additional "if"s, as in "only if X and -if- Y" to make the texts work with the `Constraints` section. Fixes: QTBUG-106871 Pick-to: 6.9 6.8 6.5 Change-Id: I18c2f9f734474017264e49165389f8c9c7f34030 Reviewed-by: Kai Köhne <kai.koehne@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Include climits explicitly instead of relying on transitive includesAhmad Samir2025-01-131-0/+1
| | | | | | Pick-to: 6.9 6.8 6.5 Change-Id: Ib55b337aa6e0a93c7ac7ee9bf492784cc81808d7 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Make multi-threaded image transforms and painter fills configurableAllan Sandfeld Jensen2024-12-051-22/+0
| | | | | | | | | Some users prefer to avoid having this many threads. This also moves disabling it for WASM from sources to config. Fixes: QTBUG-129650 Change-Id: Ib4c7903e85ba9cb75a9e013d1032653ea0ab8b84 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QThreadPool: Add Quality of Service APIMårten Nordheim2024-11-181-0/+33
| | | | | | | | Same limitation as setting priority; it only applies to threads that start after the call. Change-Id: I0f77467a76ce2f4e7743d04fde344ef08cd8dbb8 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Facilitate disabling multi-threading in image manipulation and paintingAllan Sandfeld Jensen2024-11-181-1/+3
| | | | | | | | | On some platforms and setups, the multi-threaded implementation of this functionality is not desirable. Allow disabling it at runtime by setting the environment variable QT_NO_GUI_THREADPOOL. Pick-to: 6.8 Task-number: QTBUG-129650 Change-Id: If089ecb3b335defc06f14749841bf9f6041e6f5e Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* QThreadPool: handle negative expiryTimeoutsAhmad Samir2024-10-211-7/+9
| | | | | | | | | | | | | | When setting/getting the expiryTimeout. Negative values mean "never expire", so use duration::max(), which QDeadlineTimer interprets as QDeadline::Forever. Amends (and partially reverts) c57027199996d0f0d2ac8ebc4505c78afa54ab5a Task-number: QTBUG-129898 Pick-to: 6.8 Change-Id: I8f141cd3fc3c2ff4d21ba2d9663619bc507aeca4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QThreadPool: fix regression with negative expiryTimeoutMårten Nordheim2024-10-151-1/+6
| | | | | | | | | | | | | | | | | | | It's supposed to indicate a thread never expires, but following a change where it stores the expiry with chrono we no longer considered a negative expiry as 'forever', but rather it immediately expires! More directly it is because we end up calling QDeadlineTimer::setPreciseRemainingTime(0 secs, X nsecs), and it only cares about negative seconds to set Forever. There are complications to consider nsecs for this since several nanoseconds may pass between initially calling the function and assigning the values... Amends 1f2a230b898af9da73463bca27b5883d36da7a91. Fixes: QTBUG-129898 Pick-to: 6.8 Change-Id: I9626de31810fb2751ff6d83165d7dce5258a9baf Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Limit gui thread pool to 8 threadsAllan Sandfeld Jensen2024-08-251-1/+6
| | | | | | | | | | | Avoid having too many threads, since iOS punishes us if we overstep 64, and we don't really need more than 8 on any platform. Fixes: QTBUG-128290 Pick-to: 6.8 6.7 6.5 Change-Id: I59a233d422e9b1b2097a777e0b1b626e144594d9 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QThreadPool: store the expiryTimeout in a std::chrono typeThiago Macieira2024-05-091-4/+3
| | | | | | | | | | For future-proofing. I'm not changing the front-end API because it's seldom used. Task-number: QTBUG-125107 Change-Id: Ic5b1273bb0204c31afd8fffd17ccf9ac42f57762 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
* QThreadPool: add waitForDone() based on QDeadlineTimerThiago Macieira2024-05-091-14/+18
| | | | | | | | | | | | It was already being used internally this way, so all we needed was to provide the front-end API and inline the old API. [ChangeLog][QtCore][QThreadPool] Added an overload of waitForDone() based on QDeadlineTimer. Fixes: QTBUG-125107 Change-Id: Ic5b1273bb0204c31afd8fffd17ccf7c5bee07c35 Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
* Include what you need: <QPointer>Marc Mutz2023-10-121-0/+2
| | | | | | | | | | | | | | | | | | | | | | | All these TUs relied on transitive includes of qpointer.h, maybe to a large extent via qevent.h, though, given that qevent.h is more or less the only public QtBase header that includes qpointer.h, something else seems to be at play here. Said qevent.h actually needs QPointer in-name-only, so a forward declaration would suffice. Prepare for qevent.h dropping the include. The algorithm I used was: If the TU mentions 'passiveGrabbers', the name of the QEvent function that returns QPointers, and the TU doesn't have qpointer.h included explicitly, include it. That may produce False Positives, but better safe than sorry. Otherwise, in src/, add an include to all source and header files which mention QPointer. Exception: if foo.h of a foo.cpp already includes it, don't include again. Task-number: QTBUG-117670 Change-Id: I3321cccdb41ce0ba6d8a709cea92427aba398254 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* qthreadpool: use const methods moreAnton Kudryavtsev2023-09-081-2/+2
| | | | | Change-Id: I16c017e5ff89075aa8faabcc8540d3bd10c80d45 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Doc: fix warnings from parameters not matching the documentationVolker Hilsheimer2023-05-241-5/+5
| | | | | | Change-Id: I6588336e12db0a3af9b9dfd2ab22a3e1b7c54238 Reviewed-by: Safiyyah Moosa <safiyyah.moosa@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Take move-only functions for the threadpoolAllan Sandfeld Jensen2023-05-041-28/+20
| | | | | | | | | | | | We never copy the function so only need it to movable. Moves the functions to templates using the new QRunnable create version. [ChangeLog][QtCore][QThreadPool] Methods taking callable functions, can now take move-only lambdas. Fixes: QTBUG-112302 Change-Id: I2cb200f0abcf7e0fdbef0457fe2a6176764ad93d Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Add special thread pool for Qt GuiAllan Sandfeld Jensen2023-02-251-0/+15
| | | | | | | | | To avoid gui slowdowns due to global pool being blocked. Fixes: QTBUG-109511 Pick-to: 6.5 6.4 6.2 Change-Id: I4e8d91e8fb0bd2e395072a082e992a3c5d3464ad Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* QThreadPool: Protect the access to internal data with mutexJarek Kobus2023-02-221-0/+7
| | | | | | | | | | | | The class claims to be thread safe, however, when e.g. one thread is calling setMaxThreadCount() and the second is calling maxThreadCount() at the same time for the same thread pool instance, the latter may receive rubbish data. Protect all public setters/getters with a mutex. Pick-to: 6.5 6.4 Change-Id: Ief29d017d4f80443fa1ae06f6b20872f07588768 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Port from qAsConst() to std::as_const()Marc Mutz2022-10-111-3/+3
| | | | | | | | | | | | | | | | We've been requiring C++17 since Qt 6.0, and our qAsConst use finally starts to bother us (QTBUG-99313), so time to port away from it now. Since qAsConst has exactly the same semantics as std::as_const (down to rvalue treatment, constexpr'ness and noexcept'ness), there's really nothing more to it than a global search-and-replace, with manual unstaging of the actual definition and documentation in dist/, src/corelib/doc/ and src/corelib/global/. Task-number: QTBUG-99313 Change-Id: I4c7114444a325ad4e62d0fcbfd347d2bbfb21541 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Port from container.count()/length() to size()Marc Mutz2022-10-041-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is semantic patch using ClangTidyTransformator: auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o) makeRule(cxxMemberCallExpr(on(QtContainerClass), callee(cxxMethodDecl(hasAnyName({"count", "length"), parameterCountIs(0))))), changeTo(cat(access(o, cat("size"), "()"))), cat("use 'size()' instead of 'count()/length()'")) a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'. <classes> are: // sequential: "QByteArray", "QList", "QQueue", "QStack", "QString", "QVarLengthArray", "QVector", // associative: "QHash", "QMultiHash", "QMap", "QMultiMap", "QSet", // Qt has no QMultiSet Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Use SPDX license identifiersLucie Gérard2022-05-161-38/+2
| | | | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Task-number: QTBUG-67283 Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Replace uses of _qs with _s in sources and examplesSona Kurazyan2022-04-191-1/+1
| | | | | | Task-number: QTBUG-101408 Change-Id: I48360ba3b23965cd3d90ac243c100a0656a4cde8 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Short live Q_CONSTINIT!Marc Mutz2022-03-261-2/+2
| | | | | | | | | | | | | | | | | | It expands to the first available of - constinit (C++20) - [[clang::require_constant_initialization]] (Clang) - __constinit (GCC >= 10) Use it around the code (on and near static QBasicAtomic; this patch makes no attempt to find all statics in qtbase). [ChangeLog][QtCore][QtGlobal] Added macro Q_CONSTINIT. Fixes: QTBUG-100484 Change-Id: I11e0363a7acb3464476859d12ec7f94319d82be7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* QtCore: replace QLatin1String/QLatin1Char with _L1/u'' where applicableSona Kurazyan2022-03-251-1/+3
| | | | | | | | | | | As a drive-by, did also minor refactorings/improvements. Task-number: QTBUG-98434 Change-Id: I81964176ae2f07ea63674c96f47f9c6aa046854f Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
* Fix deprecated uses of QScopedPointerMårten Nordheim2022-03-081-4/+5
| | | | | | | | | By changing it to unique_ptr. Pick-to: 6.2 6.3 Change-Id: I91abb69445b537d4c95983ae735341882352b29d Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Read QThreadPool::objectName thread-safeAllan Sandfeld Jensen2022-01-131-6/+9
| | | | | | | | | | QThreadPool allows method calls from any thread, but QObject does not so copy objectName so we may use it locally under our own lock. Pick-to: 6.3 6.2 Task-number: QTBUG-99775 Change-Id: Ib28910649f5d0f9ce698c7da495069635d608d03 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* corelib: Fix typos in documentationJonas Kvinge2021-10-121-1/+1
| | | | | | Pick-to: 5.15 6.2 Change-Id: I64d63af708bc6ddaabd12450eb3089e5077f849e Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Add a safer way to use QThreadPool::reserveThreadAllan Sandfeld Jensen2021-10-061-0/+51
| | | | | | | | | Add startOnReservedThread that specifically releases a reserved thread and uses it atomically for a given task. This can make a positive number of reserved threads work. Change-Id: I4bd1dced24bb46fcb365f12cbc9c7905dc66cdf1 Reviewed-by: David Faure <david.faure@kdab.com>
* Cleanup of qthreadpoolAllan Sandfeld Jensen2021-10-011-40/+53
| | | | | | | | | | | | | Don't bother overwaiting in waitForDone(), if it was done at one point after it was called we can return true. And do not stop threads recently awakened by a startThread call as they have tasks to do. Make allowing at least one thread regardless of reservation more standard instead of hacked in certain places. Pick-to: 6.2 Change-Id: I304bcdc5822f440d5e72fc33ba2aa1678c9ba0d0 Reviewed-by: David Faure <david.faure@kdab.com>
* QThreadPool: Fix restarting of expired threadsIevgenii Meshcheriakov2021-09-151-0/+5
| | | | | | | | | | | | | | | | Ensure that expired threads have actually finished before attempting to restart them. Calling start() on a thread that is not yet finished does nothing. Add a regression test into tst_qthreadpool that attempts to trigger reuse of expired threads and verifies that all submitted tasks execute. Fixes: QTBUG-72872 Pick-to: 6.2 Change-Id: I2109b628b8a4e91491115dc56aebf3eb249646b5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* QThreadPool: obey the docs that say we always use at least 1 threadThiago Macieira2021-04-241-7/+9
| | | | | | | | | | | | | | Even if the user (usually accidentally) sets a thread count of zero or negative. The reporter in the bug report did QThread::idealThreadCount() - 1 on a 1 CPU system... Drive-by add to the documentation and the missing #include. Pick-to: 6.1 6.0 Fixes: QTBUG-93007 Change-Id: I6cdea00671e8479b9c50fffd167807d14e030154 Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Do not access internal allThreads data unlockedAllan Sandfeld Jensen2021-04-231-0/+1
| | | | | | | Pick-to: 6.1 6.0 5.15 Change-Id: I54eb67571fff07ffdbf9d2b77c96bb85e3fae5e0 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix qdoc warning, it's QThread::PriorityVolker Hilsheimer2021-04-121-1/+1
| | | | | Change-Id: If3df55ff95f8bdb510bdc3578ba3c7c03b9029a1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QThreadPool: let the started thread have the same name as the poolThiago Macieira2021-04-031-1/+7
| | | | | | | | | | If the pool has a name. This should make identifying threads belonging to different pools easier in process-inspection tools. Fixes: QTBUG-92004 Change-Id: Id2983978ad544ff79911fffd167225902efeb855 Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Add support to set thread priority to QThreadPoolSamuel Gaist2021-04-031-2/+28
| | | | | | | | | | | | | | | | | | Currently, QThreadPool's generated threads inherit the priority from the thread they are created and that cannot be changed. This merge request adds a property to QThreadPool so that the priority of the threads can be different. The default behavior does not change. [ChangeLog][QtCore][QThreadPool] QThreadPool can now be configured to use a different thread priority when creating new threads than the one it inherits from the thread it was created in. This will only apply to the threads started after the property is changed. Fixes: QTBUG-3481 Change-Id: Ic98d4312d055a3357771abb656516ebd0715918d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Revert "Port QThreadPool to the new property system"Allan Sandfeld Jensen2021-01-291-26/+11
| | | | | | | | | | This reverts commit 8f8405e04642b98663d4752d4ae76c304ae33b01. Reason for revert: Appears not entirely thread-safe and caused QTBUG-90705 Change-Id: I390c0b1a555a18e6a095b52010371d017071e26b Fixes: QTBUG-90705 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Port QThreadPool to the new property systemSona Kurazyan2021-01-271-11/+26
| | | | | | | | | | | Ported all properties, except activeThreadCount. Marking it dirty may cause a re-evaluation of properties depending on it, which may reault in a deadlock in case of trying to read activeThreadCount property which is being marked as dirty. Task-number: QTBUG-85520 Change-Id: Id073b0895c89a9e6b05b57ad520db994e550a1c9 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Doc: Add missing brief statements for \property documentationTopi Reinio2020-11-121-7/+5
| | | | | | | | ... where applicable. Fixes: QTBUG-88232 Change-Id: I835df434765caededd35d5114965b4a1663e7942 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Whitespace cleanup in corelib/ mimetypes, plugin and threadAllan Sandfeld Jensen2020-10-211-2/+2
| | | | | | | Done with selective application of clang-format Change-Id: Iee6bf2426de81356b6d480629ba972f980b6d93d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove unnecessary ref-counting of QRunnableAllan Sandfeld Jensen2020-10-011-25/+3
| | | | | | | It could never be higher than 1 anyway. Change-Id: If33c7978a4397a08e9eb091926726725d8bd3ea6 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Fix race condition in QThreadPool::clearAllan Sandfeld Jensen2020-10-011-3/+3
| | | | | | | | | | | Since we drop the lock while deleting threads, we need to handle the queue possibly being accessed and changed by the pool threads while clear() is running. Pick-to: 5.15 Fixes: QTBUG-87092 Change-Id: I7611edab90520454278502a58621e299f9cd1f6e Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Get rid of some #ifdef qt6Allan Sandfeld Jensen2020-09-301-8/+0
| | | | | | | | | None of this code is even compiled in qt6. Change-Id: I5891cc9459320083ad3908fcbf646f3ba75b8a4d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix living QObject after shutdown of QCoreApplicationAndré Klitzing2020-06-231-3/+8
| | | | | | | | | | | | QThreadPool is a QObject and must be deleted if the QCoreApplication is being destroyed to release the underlying ThreadData. A Q_GLOBAL_STATIC won't release any memory is not able to manually release it. Pick-to: 5.15 Task-number: QTBUG-84234 Change-Id: Ia82bcff2b564b753ed687f025ff86fa1bed1e64c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove QThreadPool::cancel()Allan Sandfeld Jensen2020-06-051-18/+0
| | | | | | | Deprecated in 5.9 Change-Id: Ib6e2a5da1e7ee2664fb6fa496bdc880fab870901 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Do not multithread if already in a global threadpool threadAllan Sandfeld Jensen2020-06-031-0/+24
| | | | | | | | | | This can lead to a deadlock if we block all the worker threads, waiting for the worker threads to finish. Pick-to: 5.15 Fixes: QTBUG-84619 Change-Id: I92b7f96007897d86ece0c34223bab0df4ccbed9a Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Fix QRunnable::ref use in QThreadPoolAllan Sandfeld Jensen2020-05-071-25/+43
| | | | | | | | | | | | | | | | The reference counter could only ever be -1, 0 or 1, as an autoDeleted QRunnable can only be in a single thread pool. This commits keeps the reference counting for now, but asserts sanity, simplifies locking and fixes a leak. Pick-To: 5.15 Fixes: QTBUG-20251 Fixes: QTBUG-65486 Change-Id: I4de44e9a4e3710225971d1eab8f2e332513f75ad Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Fix memory leak on new QThreadPool::tryStart versionAllan Sandfeld Jensen2020-03-171-7/+12
| | | | | | | | Also documents the ownership of the traditional tryStart better, and remove a redundant check. Change-Id: I06202465b782926724fa33a901d08c1626f87373 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Improve argument name for std::function argumentAllan Sandfeld Jensen2020-02-261-10/+10
| | | | | | | | | | | | Less \a fun though. Note using references in this API would just duplicate the API, but still end up with a copy when creating the QRunnable. By having the copy apparent directly in the API, we not only save the duplication, we also hint to the caller to use move if they want to avoid a copy. Change-Id: If11476d4b38853839c1e87e0339807a1798fc875 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add a constructor for QRunnable from anonymous functionsAllan Sandfeld Jensen2020-01-311-0/+32
| | | | | | | | | | This makes it easier to create one without having to create a derivative class. The patch also adds a path to avoid using QRunnable directly in QThreadPool. Change-Id: I9caa7dabb6f641b547d4771c863aa6ab7f01b704 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* QWaitCondition: mark obsolete functions as deprecatedChristian Ehrlicher2019-11-071-1/+1
| | | | | | | | | Mark QWaitCondition:wait(..., ulong) as deprecated so they can be removed in Qt6. Also replace the usages of this deprecated functions inside QtCore. Change-Id: I77313255fa05f5c112b0b40d4c55339cc4f85346 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make QThreadPool::waitForDone more atomicAllan Sandfeld Jensen2018-11-121-39/+40
| | | | | | | | | | Avoid having the reset in waitForDone interfere with other uses of the thread-pool by locking the mutex higher, and maintaining the state so the queues doesn't have threads not in allThreads. Task-number: QTBUG-62865 Change-Id: I17ee95d5f0e138ec15e785c6d61bb0fe064d3659 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>