summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-08-07 18:12:02 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2018-08-07 18:12:02 +0000
commitee2e38490d51667e878ed1732df387a6d9f2a5fe (patch)
tree4f3b02ab7220326d918b199d60fb33fc497d6dac /src/network
parent491e427bb2d3cafccbb26d2ca3b7e128d786a564 (diff)
parent053e7cce79d4bef99ec85101b0d22bbb171072c5 (diff)
Merge "Merge remote-tracking branch 'origin/5.11' into dev" into refs/staging/dev
Diffstat (limited to 'src/network')
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp16
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel_p.h1
-rw-r--r--src/network/ssl/qsslsocket_mac.cpp11
3 files changed, 27 insertions, 1 deletions
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 0ac14c78f6..5726925cb0 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -251,6 +251,20 @@ bool QHttpNetworkConnectionChannel::sendRequest()
return protocolHandler->sendRequest();
}
+/*
+ * Invoke "protocolHandler->sendRequest" using a queued connection.
+ * It's used to return to the event loop before invoking sendRequest when
+ * there's a very real chance that the request could have been aborted
+ * (i.e. after having emitted 'encrypted').
+ */
+void QHttpNetworkConnectionChannel::sendRequestDelayed()
+{
+ QMetaObject::invokeMethod(this, [this] {
+ Q_ASSERT(!protocolHandler.isNull());
+ if (reply)
+ protocolHandler->sendRequest();
+ }, Qt::ConnectionType::QueuedConnection);
+}
void QHttpNetworkConnectionChannel::_q_receiveReply()
{
@@ -1234,7 +1248,7 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
emit reply->encrypted();
}
if (reply)
- sendRequest();
+ sendRequestDelayed();
}
}
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index e9cdae5653..270b3eb9ba 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -174,6 +174,7 @@ public:
void abort();
bool sendRequest();
+ void sendRequestDelayed();
bool ensureConnection();
diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp
index bcc65874bd..08ff4a9336 100644
--- a/src/network/ssl/qsslsocket_mac.cpp
+++ b/src/network/ssl/qsslsocket_mac.cpp
@@ -61,6 +61,7 @@
#include <algorithm>
#include <cstddef>
+#include <limits>
#include <vector>
#include <QtCore/private/qcore_mac_p.h>
@@ -145,6 +146,16 @@ EphemeralSecKeychain::EphemeralSecKeychain()
}
}
+ if (keychain) {
+ SecKeychainSettings settings = {};
+ settings.version = SEC_KEYCHAIN_SETTINGS_VERS1;
+ // Strange, huh? But that's what their docs say to do! With lockOnSleep
+ // == false, set interval to INT_MAX to never lock ...
+ settings.lockInterval = INT_MAX;
+ if (SecKeychainSetSettings(keychain, &settings) != errSecSuccess)
+ qCWarning(lcSsl) << "SecKeychainSettings: failed to disable lock on sleep";
+ }
+
#ifdef QSSLSOCKET_DEBUG
if (keychain) {
qCDebug(lcSsl) << "Custom keychain with name" << keychainName << "was created"