Commit Graph

52489 Commits

Author SHA1 Message Date
Daniel Nicoletti
8f75ab231f Allow to set Local Socket listen(2) backlog
Unix sockets do not suffer from SYN flood, thus the hardcoded value to
50 is size of the only queue to hold connections to be accepted,
resulting in dropped connections when the limit is reached.

On Windows the hardcoded value is 8, this patch changes the default to
50 matching UNIX.

[ChangeLog][QtNetwork][QLocalServer] Added setListenBacklogSize() to
be able to have control over the listen backlog feature.

Change-Id: Iaee6349a46b75b0bd05e40e7ade5948f1cf9f407
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2021-07-27 16:47:31 -03:00
Ivan Tkachenko
e4fd86d53a Deduplicate offset calculation in QMetaObjectBuilder
Not even an optimization (unless your compiler sucks). Just improves
readability, since offset is already calculated few lines above.

Offset formula used to be somewhat more complicated, but since commit
e58b44d557 it became reusable here.

Change-Id: I4128b2643daf2cb112c9b861342fd0e27c9a1a95
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 19:21:36 +00:00
Ivan Solovev
b095d26878 QHash/QSet: fix squeeze() for default-constructed container
QHash::squeeze() was unconditionally calling reserve(0), which is
always allocating memory (even for 0 size).
This was leading to a confusing situation when calling squeeze() on
a default-constructed container with 0 capacity() actually allocated
memory. This is very misleading, as squeeze() is supposed to free
unneeded memory, not to allocate more.

This patch adds a check for non-zero capacity. As a result, nothing
is done for default-constructed container.

Note that this patch also affects the QSet::squeeze() behavior, because
QSet uses QHash as its underlying data type.

Task-number: QTBUG-91736
Pick-to: 6.2 6.1
Change-Id: Ib1c3c8b7b3de6ddeefea0e70b1ec71803e8fd3b3
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
2021-07-27 20:57:49 +02:00
Thiago Macieira
c8782acd45 QUrlQuery/Doc: update the information about encoded vs decoded
This class was not subject to the QUrl API update that took place
between 5.0 and 5.1 that changed the QUrl string defaults and added
QUrl::ParsingMode. It always parses as TolerantMode.

Fixes: QTBUG-95254
Change-Id: I37d93a60a0d649688bddfffd169348d874eacc92
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2021-07-27 11:38:07 -07:00
Sona Kurazyan
08de1fb281 Don't report results when the results list is empty
When inserting items into the result store, a ResultItem is created,
which stores a pointer to the results list and their size. If the size
of the ResultItem is set to 0, it means that a single result is stored.
In case of trying to report results via an empty list, the size is 0, so
result store treats it as a single result.

Added checks before storing the results to make sure that the result
list isn't empty. Note that empty lists are allowed in some cases for
the filter mode, because ResultStoreBase::addResults() knows how to
handle those cases correctly.

Task-number: QTBUG-80957
Pick-to: 5.15 6.1 6.2
Change-Id: I399af4c3eef6adf82fea5df031fe9a9075006b1f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-27 19:57:27 +02:00
Mårten Nordheim
3b8127c3fc doubleToString: Fix assert when double is NaN
wholePartSpace asserts that its input is >= 0, but NaN is not a number

Change-Id: Iafc075663d5f8841f21edf0a3d4d36694287a51f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 18:16:13 +02:00
Ievgenii Meshcheriakov
62b33b6730 QTextStream: Always use direct connection inside QDeviceClosedNotifier
Force direct connection when connecting aboutToClose() signal of device
to flushStream() slot of QDeviceClosedNotifier. This allows use of a
QTextStream from multiple threads when synchronization is handled by the
application.

Queued connections from aboutToClose() don't make much sense because the
device is closed immediately after emitting the signal. If a QTextStream
object is used by threads different from the one where it was created,
queued connection may result in attempting to flush the data after
the associated device is already closed, and accessing the QTextStream's
buffers from multiple threads.

Fixes: QTBUG-12055
Change-Id: If601d0f04f08b248b21ed1630b7dfd3546aee068
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 16:16:13 +00:00
Marc Mutz
0c8b98774c QtWidgets: clean up API removals
As suggested by Peppe and Lars, use one file per module to hold the
removed functions, not one per major version and subdir. Also, make
the remove macro more like QT_DEPRECATED_SINCE.

Change-Id: I2ade51ccc8cb8720ece493936775dfd3b5d438d7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 17:44:30 +02:00
Marc Mutz
8c49ae522d QDuplicateTracker: bring back appendTo() &&
This reverts commit c19695ab95.

Just because QSet has limited API doesn't mean we can't provide this
in an efficient way for std::unordered_set :P

Added tests.

Pick-to: 6.2
Change-Id: I4f8f0e60c810acdc666cf34f929845227ed87f3b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 17:44:30 +02:00
Eirik Aavitsland
6b400e3147 Improve fix for avoiding huge number of tiny dashes
Some pathological cases were not caught by the previous fix.

Fixes: QTBUG-95239
Pick-to: 6.2 6.1 5.15
Change-Id: I0337ee3923ff93ccb36c4d7b810a9c0667354cc5
Reviewed-by: Robert Löhning <robert.loehning@qt.io>
2021-07-27 17:44:30 +02:00
Markus Goetz
85cfbae1d6 QNAM: Allow to configure when connections to a host are torn down
This introduces a new attribute that allows behavior to keep
the TCP connection(s) to a HTTP1/HTTP2 host longer or shorter
than the default of 120 seconds.
Note that the server might still close the connection earlier.

Fixes: QTBUG-20726
Fixes: QTBUG-91440
Change-Id: I7da64230a78c642c12c0ddbe6b678cf17c3aafde
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-27 17:16:58 +02:00
Ievgenii Meshcheriakov
5597e26256 time: Rerun cldr2qtimezone.py
This updates qtimezoneprivate_data_p.h changing any mention of Country
to Territory in it. The change was introduced by the following commit:

    e51831260a

There are no code changes. This reduces number of changes visible after
rerunning cldr2qtimezone.py.

Pick-to: 6.2
Change-Id: I0898ecf224108604b7178e31fa7e76b4cb13a965
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 15:55:55 +02:00
Ievgenii Meshcheriakov
4679209120 QCalendar: Make SystemId constructors with one argument explicit
This avoids unwanted type conversions.

Pick-to: 6.2
Change-Id: Ie57e80da615c6bc162224fa3816fc21a47ab4b00
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 15:07:39 +02:00
André de la Rocha
0235c02178 Windows QPA: Fix coordinates reported through UI Automation
Conversion to/from native screen coordinates was incorrect and could
fail for non-primary screens. This could cause a control's bounding
rectangle to be incorrectly reported, or a search for a control based
on its position within the window to fail, causing incorrect behavior
with accessibility tools and other software interacting with the
application using UI Automation.

Fixes: QTBUG-91459
Pick-to: 6.2 6.1 5.15
Change-Id: I5d56584ff26d977cdd34d35af46644e32aa11e7c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2021-07-27 15:07:39 +02:00
Marc Mutz
8e0c2d7d22 Fix various -Wdeprecated-enum-float-conversions around the code
In two cases, it was as easy as replacing an unnamed enum's values
with constexpr variables. In the case of QSimplex, I opted for
qToUnderlying(), as the enum made sense on its own.

Change-Id: Ifcf5be14bd2f35e50adabdbd7ecdb2e83f6bf5b4
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 14:58:41 +02:00
Marc Mutz
18113e22e9 Add a benchmark for QSharedPointer
Initial results with GCC:

Even though GCC's assembly looks rather bad because of the implicit
fall-back from atomics to non-atomics for single-threaded
applications, libstdc++'s shared_ptr still performs twice as fast as
QSharedPointer, proving that the branch predictor eats libstdc++'s
is-multi-threaded-check for breakfast and the two atomic operations of
a QSharedPointer copy vs. one for std::shared_ptr dominate the
run-time.

********* Start testing of tst_QSharedPointer *********
Config: Using QtTest library 6.2.0, Qt 6.2.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 11.1.1 20210712), ubuntu 20.04
PASS   : tst_QSharedPointer::initTestCase()
PASS   : tst_QSharedPointer::refAndDeref_null_QSP_int()
RESULT : tst_QSharedPointer::refAndDeref_null_QSP_int():
     0.0000024 msecs per iteration (total: 81, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_null_SSP_int()
RESULT : tst_QSharedPointer::refAndDeref_null_SSP_int():
     0.0000024 msecs per iteration (total: 81, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_null_BSP_int()
RESULT : tst_QSharedPointer::refAndDeref_null_BSP_int():
     0.0000025 msecs per iteration (total: 87, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_null_QSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_null_QSP_QString():
     0.0000025 msecs per iteration (total: 86, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_null_SSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_null_SSP_QString():
     0.0000023 msecs per iteration (total: 80, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_null_BSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_null_BSP_QString():
     0.0000026 msecs per iteration (total: 88, iterations: 33554432)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_QSP_int()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_QSP_int():
     0.000019 msecs per iteration (total: 83, iterations: 4194304)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_SSP_int()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_SSP_int():
     0.000010 msecs per iteration (total: 90, iterations: 8388608)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_BSP_int()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_BSP_int():
     0.0000094 msecs per iteration (total: 79, iterations: 8388608)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_QSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_QSP_QString():
     0.000017 msecs per iteration (total: 75, iterations: 4194304)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_SSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_SSP_QString():
     0.000010 msecs per iteration (total: 90, iterations: 8388608)
PASS   : tst_QSharedPointer::refAndDeref_nonnull_BSP_QString()
RESULT : tst_QSharedPointer::refAndDeref_nonnull_BSP_QString():
     0.0000091 msecs per iteration (total: 77, iterations: 8388608)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_QSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_QSP_int():
     0.000016 msecs per iteration (total: 68, iterations: 4194304)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_SSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_SSP_int():
     0.000025 msecs per iteration (total: 53, iterations: 2097152)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_BSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_BSP_int():
     0.000027 msecs per iteration (total: 58, iterations: 2097152)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_QSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_QSP_QString():
     0.000016 msecs per iteration (total: 71, iterations: 4194304)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_SSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_SSP_QString():
     0.000027 msecs per iteration (total: 58, iterations: 2097152)
PASS   : tst_QSharedPointer::threadedRefAndDeref_null_BSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_null_BSP_QString():
     0.000017 msecs per iteration (total: 73, iterations: 4194304)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_QSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_QSP_int():
     0.00073 msecs per iteration (total: 96, iterations: 131072)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_SSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_SSP_int():
     0.000408 msecs per iteration (total: 107, iterations: 262144)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_BSP_int()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_BSP_int():
     0.00033 msecs per iteration (total: 89, iterations: 262144)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_QSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_QSP_QString():
     0.000877 msecs per iteration (total: 115, iterations: 131072)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_SSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_SSP_QString():
     0.00033 msecs per iteration (total: 89, iterations: 262144)
PASS   : tst_QSharedPointer::threadedRefAndDeref_nonnull_BSP_QString()
RESULT : tst_QSharedPointer::threadedRefAndDeref_nonnull_BSP_QString():
     0.000385 msecs per iteration (total: 101, iterations: 262144)
PASS   : tst_QSharedPointer::cleanupTestCase()
Totals: 26 passed, 0 failed, 0 skipped, 0 blacklisted, 7995ms
********* Finished testing of tst_QSharedPointer *********

Change-Id: I0bed70142ffdbde6898ec0e27cb470b50fc0e97d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 14:58:41 +02:00
Tor Arne Vestbø
df62fdb51c macOS: Add helper function to check whether we're running under Rosetta
As described in https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment?language=objc#Determine-Whether-Your-App-Is-Running-as-a-Translated-Binary

Pick-to: 6.2
Change-Id: I16fa4be20e4a55c87c2eb760d671d27ee4de1703
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-27 12:58:41 +00:00
Ievgenii Meshcheriakov
25170b324b QCalendarBackend: Use QAnyStringView to create backends by name
Combine two implementations of QCalendarBackend::byName() accepting
QStringView and QLatin1String arguments into one accepting
QAnyStringView to reduce code duplication.

Add a note to QCalendar constructors accepting strings to do the
same for Qt 7.

Change-Id: Idfc3b9c61e22712543c723bd94fcd788da52780a
Pick-to: 6.2
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-27 14:58:41 +02:00
Ivan Solovev
7d49dc2222 QVarLengthArray: extend unit tests
This patch introduces some test improvements to check the calls of
different methods on an empty default-constructed container.
Apart from that, many other tests are added to extend code coverage.

Task-number: QTBUG-91736
Pick-to: 6.2 6.1
Change-Id: Icc1f1342738603c9bed065b2a36c72ea60b48962
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 13:36:17 +02:00
Nico Vertriest
d700ccc007 Doc: document deprecated classes in Qt Widgets
Fixes: QTBUG-94536
Pick-to: 6.2
Change-Id: Ibef78df4f17d084218e2cfd021692c09a621a2d0
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-27 06:44:42 +00:00
Mårten Nordheim
5d0542a356 QString::number(int): Avoid going through qlocale machinery
For increased performance, as measured with the number_qu?longlong
QString benchmarks.

The results are all good, reducing runtime by anywhere between 40
and 220 nanoseconds. The slowest test previously completing at ~330ns,
now completing at ~105ns.

Task-number: QTBUG-88484
Change-Id: Ie96e86e57b635bac01389aed531a6d9f087df983
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-26 20:43:44 +00:00
Paul Wicking
7ff72d0a0f Doc: Minor cleanup in QWidget docs
* Add missing . in \brief to silence warning.
* Move relevant text about behavior change since 4.7
  from the end to the start of the documentation block.

Task-number: QTBUG-85839
Pick-to: 6.2 5.15
Change-Id: Id3671413f17d06023035c15fc7d5badbde59c5a6
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
2021-07-26 20:37:40 +02:00
Robert Löhning
129b0a8d34 Fuzzing: Guide the compiler to the right ctor of QCalendar
Change-Id: I4e828f6ce33636eaef4f51e94e0879d735736ef1
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-26 18:37:12 +02:00
Ievgenii Meshcheriakov
9ce4241ef3 Fix typo in function name
Fix typo: containsProhibitedOuptut -> containsProhibitedOutput.

Pick-to: 6.2
Change-Id: I4eb8be4c7ceb2e96ac129ef7c64215558f7b308e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-26 18:06:28 +02:00
Tor Arne Vestbø
5604f633c0 Move Android implementation of permissions API to QtAndroidPrivate
And remove plumbing from public QCoreApplication API, which is going to
be removed in follow up patch after leaf modules have moved to the private
Android API.

The public permissions API will be reintroduced in 6.3 after further work.

Pick-to: 6.2
Change-Id: I46772284b98d0ced8d4a624a850adaa4a1dfe645
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-07-26 14:19:17 +02:00
Jaeyoon Jung
c89a9ccbcc CMake: Keep public include header locations for internal module pri
Amends f254d62cb1.

Task-number: QTBUG-95303
Pick-to: 6.1 6.2
Change-Id: Ica8d2850fe427b780d62cd9a9528f387a7ea1b79
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-26 20:46:40 +09:00
Robert Löhning
b4c44bd0fa QTextEngine: Style fix
Change-Id: I4269dd40eb4ad536f3ce8bde599241bacd898da7
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2021-07-26 13:14:34 +02:00
Nico Vertriest
111115bf88 Doc: Ensure deprecated APIs in Gui are documented as such
Added missing #if-ery and deprecation macros to a QFont constructor
that was only documented as deprecated.

Fixes: QTBUG-94521
Fixes: QTBUG-95310
Pick-to: 6.2 6.1
Change-Id: I3d0418a3f7dca191a9068cc22627fe4deb7c53c5
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-26 12:37:12 +02:00
Sona Kurazyan
bd0d8a3adb Update QtConcurrent docs and examples for reductor object usage
After 6ebe3d0f08 users don't have to
specify the result type when using functors for as a reductor.

Task-number: QTBUG-88448
Change-Id: I065fed11c1a66833ba0aac3d18e7ff0545247be1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-26 09:42:49 +02:00
Sona Kurazyan
c3a9c1ecbc QtConcurrent: Remove the redundant code for QStringList
QStringList is a typedef for QList<QString>, so it doesn't need special
handling.

Change-Id: Ib371f9fa49d9d45da7956287dd0f5b6c0224f439
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-26 09:42:45 +02:00
Alex Trotsenko
921ff400bb QLocalSocket/Win: allow delayed close to work
This mechanism was neither properly designed nor correctly tested
initially on Windows.

[ChangeLog][QtNetwork][Important Behavior Changes] QLocalSocket on
Windows now implements delayed closing, which is consistent with
the behavior on Unix.

Change-Id: Ic3bc427e68eea7f18201f6129df19fbc87d68101
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-25 10:06:27 +03:00
Alex Trotsenko
f18d8fd1fb QLocalSocket/Win: do not close the device on disconnectFromServer()
It's the user's privilege to do so when they want to finish reading the
QIODevice. Moreover, this is the only difference between close() and
disconnectFromServer().

[ChangeLog][QtNetwork][Important Behavior Changes] The Windows
implementation of QLocalSocket::disconnectFromServer() no longer calls
close(), which is consistent with the behavior on Unix.

Change-Id: Ie9ce20c60259a2b08f5254b719355bd7be9b17cd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-24 21:46:44 +03:00
Alex Trotsenko
6481733d45 QLocalSocket/Win: do not flush the pipe in disconnectFromServer()
In the case where we have pending data to write, calling flush() here
may cause the device to close immediately, if the pipe writer already
got a result of the last operation from the thread pool. In this
scenario, the device does not enter the 'Closing' state, which leads
the following code to unexpectedly fail on Windows

  socket.write(...);
  socket.disconnectFromServer();
  QVERIFY(socket.waitForDisconnected());

Removing the call to flush() makes the behavior consistent with the
implementation on Unix.

Change-Id: Ic31fbc999be979c1e5befa8f132d9fb367f472ca
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-24 16:55:43 +03:00
Alex Trotsenko
594948a07b QLocalSocket: call abort() instead of close() on destruction
The QLocalSocket destructor should immediately close the connection
and destroy the socket, clearing any pending data in the write buffer.

The abort() call ensures that the pipe is destroyed on Windows, making
the additional call to destroyPipeHandles() from the private destructor
unnecessary.

Change-Id: Ic7a0d8cf2779cd933cded864c8bab0d096469499
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-24 11:53:12 +03:00
Alex Trotsenko
3221c8dbbe QLocalSocket/Win: remove unnecessary call to setWriteChannelCount()
We no longer use the QIODevice's internal write buffer. This patch
amends 5b78d7fdcf .

Change-Id: Ife5a6ba3c2216d5a3e0a8278da98e0a36886d765
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-24 11:52:57 +03:00
Alex Trotsenko
719116db3d QLocalSocket/Win: remove dead code in disconnectFromServer()
The _q_pipeClosed() slot unconditionally removes the pipeWriter just
before closing the pipe. Thus, if we have an invalid handle here,
the pipe writer has already been destroyed anyway.

Change-Id: I57463d8464afe6141c21a63851a56ebddabd3f13
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2021-07-24 11:52:42 +03:00
Alex Trotsenko
d9c0af92bd QLocalSocket/Unix: fix aborting the socket
According to the documentation, calling abort() should immediately
reset the socket to its initial state. This includes:

  - closing the file descriptor;
  - closing the QLocalSocket as an I/O device;
  - canceling a pending outgoing connection, if it exist;
  - reseting 'serverName' string.

So, adding a call to close() resets the state entirely.

Pick-to: 6.1 6.2
Change-Id: I9c604b5187c6300b437d7aa4c2d06db03edacf21
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-24 11:52:30 +03:00
Marc Mutz
a7da8e0dab QWidget: cope with QObject::connect()'s incomplete SFINAE-friendliness
The plan for QObject::connect() (perfect) forwarders, such as
QWidget::addAction(), was to just use a variant of the Detection Idiom
to see whether QObject::connect() with the arguments as given would
compile and SFINAE out the forwarder otherwise.

It turns out that the "functor" overload of QObject::connect(), in
particular, is severly underconstrained and accepts e.g. QKeySequence
as a function object, only erroring out via a static_assert() in the
body of the function, and thus at instantiation time and not, as
needed, at overload resolution time.

At the same time, we don't really want QObject::connect() to SFINAE
out on argument mismatches between signal and slot, because the
resulting error messages would be ... unkind to users of the API. We
would like to keep the static_assert()s for easier error reporting.

Reconciling these two contradicting requirements has so far eluded
this author, so for now, to unblock progress, we explicitly black-
and, in one case, white-list possible arguments. Because QKeySequence,
in particular, is implicitly constructible from int(!), and therefore
any enum type(!), incl. Qt::ConnectionType, we need to do way too much
coding in the addAction() constraints. Hopefully, we'll be able to fix
the issue at the root cause, in QObject, before Qt 6.3 is out, but
until then, this is an ok-ish stop-gap measure.

Add thorough overload set checks (positive ones only, for now) to
tst_qwidget and tst_qmenu.

Change-Id: Ia05233df818bc82ecc924fc44c1b349af41cbbf1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-07-24 00:33:09 +02:00
Li Xinwei
bd594f9457 CMake: Use namespaced variables in Qt6*Dependencies.cmake
Pick-to: 6.2 6.1
Change-Id: I166988020cfd9750a4d58e519742215d0c03ad3e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-24 03:51:53 +08:00
Edward Welbourne
1ae4c56ceb Purge empty methods from tst_QSqlRecord
There's no point mentioning empty init(), constructor and destructor.

Change-Id: I0b820f62fd46a955aae891adfc68ca366ca60672
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2021-07-23 20:35:02 +02:00
Edward Welbourne
415457302b Select PostgreSQL-only data, rather than filtering in the test
Two QSqlRecord benchmarks that are only relevant for PostgreSQL were
being run for all backends, without producing useful results for the
others. Since the test is data-driven and the generic data-table code
can take a backend-name to decide which to include, pass a suitable
string to the generic data method instead, so that we now simply skip
these tests (and say we're doing so) rather than "passing" them.

Change-Id: I2223c16007a7095a9cadd13a9b2d46813507a35f
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-07-23 20:35:02 +02:00
Edward Welbourne
54e50792da Rename QSqlRecord benchmark's source file to match its test name
Change-Id: I580f185b3bbe283dfa2f43bbc986233d01219814
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-07-23 20:35:01 +02:00
Edward Welbourne
432eab3bc0 Make QSqlRecord benchmarks non-fatuous
Because QBENCHMARK re-runs its block repeatedly, to get sensible data,
the block needs to actually do something when repeated. Since these
tests had blocks that looped while (qry.next()), they left qry at its
end state, so such repeats tested nothing. Use seek(0) at the start of
each cycle to actually do the work repeatedly when the block is
repeated. As a drive-by, split a long line.

Pick-to: 6.2 6.1 5.15
Task-number: QTBUG-91713
Change-Id: Id46f77dc5e71335871af79ff61e1980b5f636179
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-07-23 20:35:01 +02:00
Edward Welbourne
346bdc6143 Halve the data-set size of tst_QSqlRecord::benchmarkRecord()
At 1000, the set-up was taking longer than the five minutes
QtTestLib's WatchDog allows, so the test got killed.

Pick-to: 6.2 6.1 5.15
Task-number: QTBUG-91713
Change-Id: Ia3c85b223fc917ad5817364505cbffe50d67ddc6
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-07-23 20:35:00 +02:00
Edward Welbourne
328f22561d Convert QLocalSocket benchmark to use QTestEventLoop
Now that this event loop pays attention to test failures, we can avoid
the time-outs that used to happen on test failure. Also check for
premature failures (but don't return early, so we can shut down the
server gracefully) and give the event-loops sensible time-outs.

Task-number: QTBUG-91713
Change-Id: Ib895a5fba0f22654c7fecf996f23649a4b5ce0de
Reviewed-by: Alex Trotsenko <alex1973tr@gmail.com>
2021-07-23 19:48:59 +02:00
Edward Welbourne
ebae6e2041 Assert some more things we can be sure of in the QMap benchmark
Just in case the test isn't testing what we think it is.
One of my earlier changes didn't until this told me about it.

Change-Id: Idd6f415d543509cabb3a64219736bb43e60a70ef
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2021-07-23 17:19:18 +02:00
Edward Welbourne
23434f487b QMap benchmark: use unsigned accumulators and check them
The sum of the first 100000 naturals is more than 2^32, so using an
int accumulator to collect the values is susceptible to overflow,
which is UB for signed integral types. So switch to an unsigned type.
We don't care about the actual sum, only having the various map
entries we fetch "used".

Since unsigned arithmetic is well-defined even when it overflows, we
can calculate the expected sum and verify it, to ensure that no matter
how clever the optimizer, it won't throw out the accumulator as
written but not read (and then optimize out all the tested code).

As a drive-by, rename one of the accumulators to match the rest.

Change-Id: I93a2825247c96ca88fe52fdb7ce1e5456eebad54
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2021-07-23 17:19:12 +02:00
Edward Welbourne
d0f9743d3b Rename QMap benchmark source file to match test name
s/main/tst_bench_qmap/g

Change-Id: Ic520254f5b5f946f4eaa234352317749a9a7301f
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2021-07-23 17:19:04 +02:00
Edward Welbourne
b3e2e5f5b9 Give symbolic names to the sizes of data-sets tested in QMap benchmark
Mostly so that I can put comments on them to indicate why some tests
are bigger and others not so big.

Change-Id: I633ceb264aa96ee8f5345e3f342a518e8ae4838b
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2021-07-23 17:18:59 +02:00
Allan Sandfeld Jensen
162d486c0d Remove special casing of HSL QColor comparison
All other equality comparisons except floating-point are value
comparisons, not interpretation comparisons.

[ChangeLog][QColor] Equality on HSL colors is now raw value
based like other color-formats, instead of being partially
interpretation based.

Pick-to: 6.2
Change-Id: I391464da172af6a2d69178b94203d36f7ce2c07d
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2021-07-23 15:15:59 +00:00