summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
Commit message (Collapse)AuthorAgeFilesLines
* Add QAndroidApplication as a nativeInterfaceAssam Boudjelthia2021-02-201-24/+8
| | | | | | | | | | QAndroidApplication provides the Android specific app context() and isActivityContext() to determine whether the context is an Activity or otherwise a Service. Task-number: QTBUG-90499 Change-Id: Iae2eef7ec44859a89825b09f52f09506b20b5420 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QProcess::startDetached/Unix: move up the chdir() and remove qWarningThiago Macieira2021-02-181-6/+6
| | | | | | | | | | That qWarning cannot be in the child process (we don't know if a user logger is fork-no-exec-safe) and the failure to chdir() should be reported as a failure in QProcess::startDetached() instead. Change-Id: Ic90d8429a0eb4837971dfffd1664e7577c81610b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: David Llewellyn-Jones <david.llewellyn-jones@jolla.com>
* QProcess/Unix: remove unnecessary chdir("/") before _exit()Thiago Macieira2021-02-181-2/+0
| | | | | | | | | That only created an opportunity for qWarning(), which should never be in the child process in the first place. Change-Id: Ic90d8429a0eb4837971dfffd1664e57a2291ea78 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: David Llewellyn-Jones <david.llewellyn-jones@jolla.com>
* QProcess/Unix: remove dead functionAlex Trotsenko2021-01-293-10/+4
| | | | | | | | findExitCode() doesn't do anything on Unix. Change-Id: I3efdc1380a39437c4c029073f3b10ccf7a65e580 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QProcess/Unix: simplify notifiers deactivationAlex Trotsenko2021-01-272-18/+4
| | | | | | | | To minimize code duplication, move the socket notifier deletion to the closeChannel() function, where the pipe descriptor will be closed. Change-Id: If75ba1c955c706ae6e2b3d9f53f7a25e4aa32fa7 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Make QJniObject and QJniEnvironment public APIAssam Boudjelthia2021-01-271-25/+25
| | | | | | | | | | | | | | | | | | | | As part of Qt 6 restructring for the extras modules, this change exposes the Jni APIs which are very important for Android platform. This patch adds the APIs QJniObject, QJniEnvironment, QJniExceptionCleaner based from private QtCore and QtAndroidExtras. The Jni interface is cross-platform which justifies the name, but currently, this API is used mainly for Android, and the naming comes generic without Android keyword to avoid any future limitation on supporting other platforms. [ChangeLog][QtCore] Add new QJniObject, QJniEnvironment and QJniExceptionCleaner APIs. Task-number: QTBUG-89482 Fixes: QTBUG-89633 Change-Id: I4382dd53a225375759b9d042f6035a4a9810572b Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
* QProcess/Win: move pipe draining into QWindowsPipeReaderAlex Trotsenko2021-01-224-32/+89
| | | | | | | | | | | | | | | | | | ... where it belongs. To avoid the loop, introduce the drainAndStop() function, which allows QWindowsPipeReader to flush the pipe itself. It determines the number of bytes pending and blocks until the remainder of the process output is received. Note that the loop in drainOutputPipes() didn't actually have to interleave the two pipes (because we're presuming that the operations will finish instantly), so we don't do it now. Also, the code violated the API contract: 'true' was returned when the 'wrong' channel received data; this is now fixed as a side effect. Change-Id: I38ed4861a238e39e793c3716e856e5bfdeed3d74 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QSettings: Add support for QMetaType::FloatChristian Ehrlicher2021-01-151-0/+1
| | | | | | | | | | | When writing out a float value, the output string is encoded as QVariant for no reason. Looks like an oversight when QMetaType::Float was added a long time ago. Fixes: QTBUG-21156 Change-Id: I7f5d31e15892d700c1b1e5e731b7733ce3a15730 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add some error handling for the inotify file system watcherLu Zhen2021-01-141-1/+3
| | | | | | | | | | In the readFromInotify() function, add a check whether the ioctl function is successful or not. In the case of failure, continuing to execute the following code would cause errors in the read function because there is no data in the buffer. Change-Id: Id53037e9e48c97c9eb75835048143875275b6370 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* QProcess/Win: clean up death notifier teardownAlex Trotsenko2021-01-091-12/+8
| | | | | | | | | | | | To avoid the mostly hypothetical possibility of failure, delete the processFinishedNotifier before closing the handle on which it operates. Previously, because of this, we explicitly disabled the notifier in the processFinished() function, which made the code unclear. Now, we can remove that safely, because cleanup() works correctly, and doing it before calling findExitCode() was not necessary to start with. Change-Id: Ia7095ded2c7eba8f4d738c6b87c7be41aa3cbbc8 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Remove useless call in QProcessPrivate::waitForFinished() on WindowsAlex Trotsenko2021-01-091-3/+1
| | | | | | | | | if pid == nullptr, the child process has already exited and the pipe readers have been stopped. So the call to drainOutputPipes() is unnecessary here. Change-Id: I0bed90d08ac879bb0ae178a1cdc37afb9d825314 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Unix: do not activate read notifiers until process has startedAlex Trotsenko2021-01-091-2/+6
| | | | | | | | Otherwise, the user may receive the readyRead() signal just before started(). Change-Id: I8d6fd18fdfcef0580a3e609100198b03b18b1175 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Split QProcessPrivate::_q_processDied()Alex Trotsenko2021-01-094-40/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The completion of the child process can take place asynchronously or in one of the waitFor...() functions. In both cases, we used the same handler (_q_processDied()), which caused several problems: a. technically, waitForReadyRead() should have taken into account the result of the calls to _q_canRead...() slots inside the _q_processDied() function: - the user calls waitForReadyRead(); - forkfd descriptor becomes signaled, while a grandchild process is still alive; - as readyRead() signal has not been emitted, _q_processDied() is called; - the grandchild process writes to stdout pipe; - now data arrives, and _q_processDied() will collect it, but won't report it. b. we had a bug with recursions on Unix: - death notification comes asynchronously; - waitForDeadChild() closes forkfd; - _q_canRead...() emits readyRead(); - a slot connected to readyRead() calls waitForFinished(); - waitForFinished() hangs (forkfd == -1). c. for blocking functions, drainOutputPipes() was called twice on Windows. By introducing a new processFinished() function, we leave the read operations in the _q_processDied() slot, while the process completion code is guaranteed to run only once. Change-Id: I5f9d09bc68a058169de4d9e490b48fc0b35e94cd Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QDir/QFileInfo: add doc notes about paths starting with ':'Ahmad Samir2021-01-082-7/+27
| | | | | | | | | | | | | This is an addendum to commit 0da5726a43b; making the note about paths starting with ':' being treated as absolute paths by the underlying QFileSystemEngine, more visible, so that users of the class don't hit that pitfall. Add similar docs to QFileInfo. Pick-to: 5.15 6.0 Change-Id: Ib34d066d31bb673d340ec41422ed4daf911765b8 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QProcess/Unix: consolidate process state tracking socket notifiersAlex Trotsenko2021-01-083-34/+30
| | | | | | | | | | | | | | | | There is no reason to have the startup notifier and the death notifier be active at the same time, as the former will detect death as well. Previously, these notifiers were racing, but _q_processDied() ordered signals by calling _q_startupNotification() manually. Thus, the started()/finished() sequence was always emitted if the child process was killed anywhere. Now this ordering is simply not necessary anymore. This makes it possible to reuse the startup notifier for death notification. Change-Id: I5ebed9b5f28b19fe56c80498977a3b21be9288fd Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Remove the qmake project filesJoerg Bornemann2021-01-071-197/+0
| | | | | | | | | | | | | | | | Remove the qmake project files for most of Qt. Leave the qmake project files for examples, because we still test those in the CI to ensure qmake does not regress. Also leave the qmake project files for utils and other minor parts that lack CMake project files. Task-number: QTBUG-88742 Change-Id: I6cdf059e6204816f617f9624f3ea9822703f73cc Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Remove superfluous call in QProcessPrivate::_q_startupNotificationAlex Trotsenko2021-01-051-2/+0
| | | | | | | | There is no need to disable startupSocketNotifier because the call to QProcessPrivate::processStarted() will do that. Change-Id: I20b816533d9a5c4b9bf57135d26166c961a07d07 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Win: do not duplicate handles for pipelined processesAlex Trotsenko2021-01-031-24/+8
| | | | | | | Instead, make them inheritable at creation time. Change-Id: I1aabc203851b2873acc772ba20258238cbe01d59 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess: allow pipelining for detached processesAlex Trotsenko2020-12-311-6/+12
| | | | | | | | [ChangeLog][QtCore][QProcess] Added support for setStandardOutputProcess() with startDetached(). Change-Id: I61278cdb7084127f583c8c017688da392017b44c Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess: allow merged channels forwarding for detached processesAlex Trotsenko2020-12-314-37/+32
| | | | | | | | [ChangeLog][QtCore][QProcess] Added support for QProcess::MergedChannels mode with startDetached(). Change-Id: I953ad2063322015332269522a297f8e2842e438c Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess: consolidate channel managementAlex Trotsenko2020-12-314-57/+80
| | | | | | | | | | We have the same channel forwarding, redirecting, and merging rules for all platforms. This makes it possible to introduce the openChannels() function, which consolidates the logic and performs high-level general processing of the channels configuration properties. Change-Id: Id3574fc42a56829328369b6a1a6ec9c95fce8eca Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Win: do not needlessly duplicate std handles in startProcess()Alex Trotsenko2020-12-302-38/+35
| | | | | | | | | | | The idea was to create descriptors with HANDLE_FLAG_INHERIT. However, this can be assumed to be already the case for std descriptors, and if it isn't, the user messed up, and we shouldn't try to work around it. This is consistent with what we already do in startDetached(). Change-Id: I8135c5e612c361e77a0442541f2d50cfbb5b4601 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Win: handle more errors in openChannel()Alex Trotsenko2020-12-301-40/+46
| | | | | | | | | | | | In theory, low-level functions like CreateNamedPipe() or DuplicateHandle() could suddenly fail. Thus, in order to ensure the correct configuration of the channels, we must check for these errors. Pick-to: 6.0 5.15 Change-Id: I3d6291043e5e394ec5c5a7d85dfb7b09bfdcd172 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QProcess/Unix: speed up initialization of write notifierAlex Trotsenko2020-12-181-3/+2
| | | | | | | | By using new QSocketNotifier API, we can avoid unnecessarily enabling the notifier right before turning it off again. Change-Id: Ie0dea00251e9885653677c495dfc5abaaa4db1c7 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Unix: do not create pipes for forwarded channelsAlex Trotsenko2020-12-171-13/+28
| | | | | | | | | | | | | | | | | | The child process inherits a standard handle of the main process in such cases: stdin - inputChannelMode == QProcess::ForwardedInputChannel, stdout - processChannelMode == QProcess::ForwardedChannels || processChannelMode == QProcess::ForwardedOutputChannel, stderr - processChannelMode == QProcess::ForwardedChannels || processChannelMode == QProcess::ForwardedErrorChannel || processChannelMode == QProcess::MergedChannels For these combinations we should not create pipes and notifiers as they would not be used. Change-Id: I8e3836e4d840a40b338c85c54645539ebcaab3f6 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess: remove unused memberAlex Trotsenko2020-12-152-2/+0
| | | | | Change-Id: I448a32b8ba11426c70d49f7f492b73e7799cc257 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QUrl: improve parseIp6's use of QStringViewThiago Macieira2020-12-121-6/+4
| | | | | Change-Id: I55083c2909f64a1f8868fffd164f20a2fb8ff7f6 Reviewed-by: David Faure <david.faure@kdab.com>
* QUrl: update parseIp6 to use QStringView, as the comment requestedThiago Macieira2020-12-121-8/+6
| | | | | | Change-Id: I55083c2909f64a1f8868fffd164f2058f226fa61 Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* QUrl: fix parsing of empty IPv6 addressesThiago Macieira2020-12-091-0/+6
| | | | | | | | There's an assertion. Found by Google fuzz scan of CBOR data. Pick-to: 6.0 5.15 Change-Id: I55083c2909f64a1f8868fffd164f1ff3af71605b Reviewed-by: David Faure <david.faure@kdab.com>
* QProcess: remove outdated references to QProcessManagerAlex Trotsenko2020-12-092-3/+0
| | | | | | | No such thing exists since Qt 5.5. Change-Id: Ib3f83dbb1087db1880ef37438669430e0f076301 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Unix: unify waiting in 'Starting' stateAlex Trotsenko2020-12-092-22/+11
| | | | | | | | | | | It makes no sense to poll the I/O pipes if we didn't get a start-up notification yet. And in fact, all waitFor...() functions except waitForReadyRead() did already explicitly wait for process startup completion. So fix that one up, and remove the handling of 'Starting' state from the I/O loops. Change-Id: Ibb7eb7c768bef3f9b6c54009c73b91775570102c Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess: migrate to QDeadlineTimerAlex Trotsenko2020-12-094-55/+41
| | | | | | | | | Replacing QElapsedTimer with QDeadlineTimer simplifies the code in waiting functions, which also improves readability. Change-Id: I56aedd356b547b6735ed0985dc81be706e292437 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QProcess: simplify the logic around _q_processDied()Alex Trotsenko2020-12-064-18/+15
| | | | | | | | | | | Both on Unix and Windows, _q_processDied() unconditionally releases all resources associated with the terminated child process, resets QProcess to the initial state, and emits finished() signal. Thus, we can omit reporting success, which also eliminates the related checks from callers. Change-Id: I40e32d1a9ccc8d488be6badba934355d734a8abd Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Use (new) erase()/erase_if() algorithmsMarc Mutz2020-12-051-2/+1
| | | | | Change-Id: I45c18fd45c20b226e44d16315e3ebb6c305d4ab0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix broken link to Zstandard libraryAndreas Buhr2020-12-041-1/+1
| | | | | | | | | | | | The old link zstd.net is not working any more. Zstandard is now at http://facebook.github.io/zstd/. To ease maintenance in the future, those links now point to "Zstandard Site" which is maintained in external-resources.qdoc. Task-number: QTBUG-88533 Pick-to: 6.0 Change-Id: Ic8f067fd5d7ce1a088d0272797fca98fd506a26e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Android: Kill calls to deprecated func in API 29Piotr Mikolajczyk2020-12-041-55/+7
| | | | | | | | | | | | | | | | Since API 29 functions: - getExternalStoragePublicDirectory - getExternalStorageDirectory are deprecated and no longer return directly accessible path. This patch replaces calls to those with suggested call to Context.getExternalFilesDir(String) Task-number: QTBUG-87803 Pick-to: 5.15 5.12 6.0 Change-Id: I36bc5d5b72a80017996445af0d577aacf5e112d3 Reviewed-by: Rami Potinkara <rami.potinkara@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Fix links to Application ExampleVolker Hilsheimer2020-12-021-1/+1
| | | | | | | | | | The example was renamed in 6cb36d825d365988ea7a601218bdd3a329290469. Pick-to: 6.0 Change-Id: Ic9daac60002c9988dfeb5c7dcde74edb69388f37 Reviewed-by: Andreas Buhr <andreas.buhr@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Jason McDonald <macadder1@gmail.com>
* QProcess/Unix: remove redundant checks in waitForReadyRead()Alex Trotsenko2020-12-011-10/+7
| | | | | | | | | QProcessPrivate::tryReadFromChannel() returns 'true' only if we emitted readyRead() signal on the current read channel. Thus, these additional checks are unnecessary. Change-Id: Id98620cd08ee8808f60539c009986b869e517ef0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* QProcess/Win: improve reading in waitForBytesWritten()Alex Trotsenko2020-12-011-8/+2
| | | | | | | | | | | | | | | On Windows, tryReadFromChannel() just publishes the data that was already buffered by the pipe reader. Reading from the pipe was still possible only because the pipe writer enters an alertable wait state which can trigger an I/O callback for the read operation as well. This made the implementation unclear and tied to APC behavior. To avoid this, we now call the "proper" pipe reader wait function instead, which also unifies the code with the other waitFor...() implementations. Change-Id: I7376d7973477a722472ff8763f95f39e6ea2fce9 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Replace discouraged Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPEAndreas Buhr2020-11-306-10/+10
| | | | | | | | | | | | | | Q_MOVABLE_TYPE was conceived before C++ had move semantics. Now, with move semantics, its name is misleading. Q_RELOCATABLE_TYPE was introduced as a synonym to Q_MOVABLE_TYPE. Usage of Q_MOVABLE_TYPE is discouraged now. This patch replaces all usages of Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPE in QtBase. As the two are synonymous, this patch should have no impact on users. Pick-to: 6.0 Change-Id: Ie653984363198c1aeb1f70f8e0fa189aae38eb5c Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
* QStandardPaths: Don't change permissions of XDG_RUNTIME_DIRAlexander Volkov2020-11-301-29/+30
| | | | | | | | | | | | | | | | | | Conform to the XDG Base Directory Specification: "If, when attempting to write a file, the destination directory is non-existent an attempt should be made to create it with permission 0700. If the destination directory exists already the permissions should not be changed." At the same time the spec states about XDG_RUNTIME_DIR that "its Unix access mode MUST be 0700", so don't consider the directory with wrong permissions correct and use a fallback. Task-number: QTBUG-68338 Pick-to: 5.15 5.12 Change-Id: I03c6b35b3f7d5ceb8e6326695bfc8207da92ea67 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: David Faure <david.faure@kdab.com>
* Also remove 0 initialization from QUrlTwoFlagsAllan Sandfeld Jensen2020-11-271-2/+1
| | | | | | | | Was overlooked when removed from QFlags Pick-to: 6.0 6.0.0 Change-Id: If65ff4a07e2f72589d2c32c2d24366ff9dc2405f Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Replace qt_make_unique with std::make_uniqueAllan Sandfeld Jensen2020-11-233-10/+5
| | | | | | | We can depend on C++14 now. Change-Id: Iee9796cd22dbfbb70d4bdb25f0eee1662a026d6d Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Remove QScopedSharedPointerGiuseppe D'Angelo2020-11-201-1/+0
| | | | | | | It's private and unused since ~2012. Change-Id: Iea11af27f7eebf3eae2467b22b68cd4c26885edd Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Deprecate QScopedPointer::take()Giuseppe D'Angelo2020-11-201-4/+5
| | | | | | | | | | | | | | | | | | | We've decided that QScopedPointer shouldn't be movable, because it would break the semantics of being "scoped" (the pointer/pointee won't survive the scope). Then, QScopedPointer shouldn't allow for take() either. If you need those semantics, reach for unique_ptr. [ChangeLog][QtCore][QScopedPointer] The take() function has been deprecated. This was an API mistake, as it allowed the pointer/pointee to escape from the scope, defeating the point of the QScopedPointer class. If you need such semantics, use std::unique_ptr (and call release()). Change-Id: I3236f085f763b04eb98e3242abc06f7c54fb3d8b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Revert "Allow QWindowsPipe{Reader,Writer} to work with foreign event loops"Kai Koehne2020-11-204-533/+284
| | | | | | | | | | | | | | This reverts commit ee122077b09430da54ca09750589b37326a22d85. Reason for revert: This causes QProcess::readAll() to sometimes return nothing after the process has ended. Fixes: QTBUG-88624 Change-Id: I34fa27ae7fb38cc7c3a1e8eb2fdae2a5775584c2 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> (cherry picked from commit 23100ee61e33680d20f934dcbc96b57e8da29bf9) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Allow QWindowsPipe{Reader,Writer} to work with foreign event loopsAlex Trotsenko2020-11-174-284/+533
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a foreign event loop that does not enter an alertable wait state is running (which is also the case when a native dialog window is modal), pipe handlers would freeze temporarily due to their APC callbacks not being invoked. We address this problem by moving the I/O callbacks to the Windows thread pool, and only posting completion events to the main loop from there. That makes the actual I/O completely independent from any main loop, while the signal delivery works also with foreign loops (because Qt event delivery uses Windows messages, which foreign loops typically handle correctly). As a nice side effect, performance (and in particular scalability) is improved. Several other approaches have been tried: 1) Using QWinEventNotifier was about a quarter slower and scaled much worse. Additionally, it also required a rather egregious hack to handle the (pathological) case of a single thread talking to both ends of a QLocalSocket synchronously. 2) Queuing APCs from the thread pool to the main thread and also posting wake-up events to its event loop, and handling I/O on the main thread; this performed roughly like this solution , but scaled half as well, and the separate wake-up path was still deemed hacky. 3) Only posting wake-up events to the main thread from the thread pool, and still handling I/O on the main thread; this still performed comparably to 2), and the pathological case was not handled at all. 4) Using this approach for reads and that of 3) for writes was slightly faster with big amounts of data, but scaled slightly worse, and the diverging implementations were deemed not desirable. Fixes: QTBUG-64443 Change-Id: I1cd87c07db39f3b46a2683ce236d7eb67b5be549 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Adjust code format, add space after 'if'Zhang Sheng2020-11-165-30/+30
| | | | | | Change-Id: Ice081c891ff7f4b766f49dd4bd5cf18c30237acf Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: hjk <hjk@qt.io>
* Fix reference of qt_attribution.json to license fileKai Koehne2020-11-161-373/+0
| | | | | | | | Amends 4f076db3d and 0ebda39e065 Change-Id: I307bb59acdfe00cf0ffe4f0f645152f2a8ba11a6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* don't ever force fork() instead of forkfd()Oswald Buddenhagen2020-11-161-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | this implements a suggestion made by a comment that got lost in 028ddf363: as explained in 97645478's commit message, we were forcing use of fork() because we couldn't be sure that the code in a custom setupChildProcess() did not rely on pthread_atfork() callbacks being called. however, that in turn was inconsistent with the default behavior, and made customizing QProcess mutually exclusive with benefitting from forkfd(). use the opportunity presented by changing the method of modifying child process behavior to also change this. this also amends 4e2f4670, as most of the now deleted comment in fact related to the use of vfork semantics, which we don't do anymore. [ChangeLog][Important Behavior Changes][QtCore][QProcess][Unix] pthread_atfork() callbacks are consistently not invoked on reasonably recent Linux and FreeBSD systems any more. This was already the case in later Qt 5 releases, unless setupChildProcess() was overridden. Change-Id: Icb239e4d2c705bf4665589469022a521267f7db5 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>