From ab813eab98665e65be3ffaea2f80b721f990308e Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 14 Mar 2021 09:48:00 -0700 Subject: [PATCH] QCoreApplication: improve docs on exit() and quit() thread-safety Reporter of QTBUG-91771 was confused. Change-Id: I26b8286f61534f88b649fffd166c4368167a5638 Reviewed-by: Lars Knoll (cherry picked from commit 183df80b9c1439202ae6b967774123cb313e9097) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qcoreapplication.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 781791c971a..924ab6d6ec0 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1400,6 +1400,12 @@ void QCoreApplicationPrivate::execCleanup() function \e does return to the caller -- it is event processing that stops. + Note also that this function is not thread-safe. It should be called only + from the main thread (the thread that the QCoreApplication object is + processing events on). To ask the application to exit from another thread, + either use QCoreApplication::quit() or instead call this function from the + main thread with QMetaMethod::invokeMethod(). + \sa quit(), exec() */ void QCoreApplication::exit(int returnCode) @@ -1951,6 +1957,8 @@ void QCoreApplicationPrivate::maybeQuit() } /*! + \threadsafe + Asks the application to quit. The request may be ignored if the application prevents the quit, @@ -1962,7 +1970,7 @@ void QCoreApplicationPrivate::maybeQuit() code 0 (success). To exit the application without a chance of being interrupted, call - exit() directly. + exit() directly. Note that method is not thread-safe. It's good practice to always connect signals to this slot using a \l{Qt::}{QueuedConnection}. If a signal connected (non-queued) to this slot @@ -1975,6 +1983,11 @@ void QCoreApplicationPrivate::maybeQuit() \snippet code/src_corelib_kernel_qcoreapplication.cpp 1 + \b{Thread-safety note}: this function may be called from any thread to + thread-safely cause the currently-running main application loop to exit. + However, thread-safety is not guaranteed if the QCoreApplication object is + being destroyed at the same time. + \sa exit(), aboutToQuit() */ void QCoreApplication::quit()