From 50681e64f71134fa159f98026824a9e5f836a237 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Thu, 3 Nov 2016 01:05:41 +0000 Subject: [PATCH] revert back to QScopedPointer for the network component the problem with the component is that it's mostly async and most applications expect the pointer to remain valid longer than they should and some just crash (konqueror, kuassel, etc.). Signed-off-by: Ivailo Monev --- src/network/access/qhttp.cpp | 1 - src/network/access/qhttp.h | 3 +- src/network/kernel/qhostaddress.cpp | 4 +-- src/network/kernel/qhostaddress.h | 3 +- src/network/kernel/qhostinfo.cpp | 5 ++-- src/network/kernel/qhostinfo.h | 3 +- src/network/kernel/qnetworkinterface.cpp | 5 ++-- src/network/kernel/qnetworkinterface.h | 3 +- src/network/socket/qsocks5socketengine.cpp | 1 - src/network/ssl/qsslcipher.cpp | 5 ++-- src/network/ssl/qsslcipher.h | 3 +- src/network/ssl/qsslerror.cpp | 35 ++++++++++++++++++---- src/network/ssl/qsslerror.h | 11 +++++-- 13 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp index f4459081b..8b7de1e9c 100644 --- a/src/network/access/qhttp.cpp +++ b/src/network/access/qhttp.cpp @@ -619,7 +619,6 @@ QHttpHeader::QHttpHeader(QHttpHeaderPrivate &dd, const QHttpHeader &header) */ QHttpHeader::~QHttpHeader() { - delete d_ptr; } /*! diff --git a/src/network/access/qhttp.h b/src/network/access/qhttp.h index f88363240..694e98233 100644 --- a/src/network/access/qhttp.h +++ b/src/network/access/qhttp.h @@ -46,6 +46,7 @@ #include #include #include +#include QT_BEGIN_HEADER @@ -107,7 +108,7 @@ protected: QHttpHeader(QHttpHeaderPrivate &dd, const QString &str = QString()); QHttpHeader(QHttpHeaderPrivate &dd, const QHttpHeader &header); - QHttpHeaderPrivate* d_ptr; + QScopedPointer d_ptr; private: Q_DECLARE_PRIVATE(QHttpHeader) diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index d15959bd4..0f8f95029 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -486,7 +486,7 @@ QHostAddress::QHostAddress(const struct sockaddr *sockaddr) Constructs a copy of the given \a address. */ QHostAddress::QHostAddress(const QHostAddress &address) - : d(new QHostAddressPrivate(*address.d)) + : d(new QHostAddressPrivate(*address.d.data())) { } @@ -532,7 +532,7 @@ QHostAddress::~QHostAddress() */ QHostAddress &QHostAddress::operator=(const QHostAddress &address) { - d = address.d; + *d.data() = *address.d.data(); return *this; } diff --git a/src/network/kernel/qhostaddress.h b/src/network/kernel/qhostaddress.h index e929933ef..a3303c0e1 100644 --- a/src/network/kernel/qhostaddress.h +++ b/src/network/kernel/qhostaddress.h @@ -44,6 +44,7 @@ #include #include +#include #include struct sockaddr; @@ -121,7 +122,7 @@ public: static QPair parseSubnet(const QString &subnet); protected: - QHostAddressPrivate* d; + QScopedPointer d; }; inline bool operator ==(QHostAddress::SpecialAddress address1, const QHostAddress &address2) diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 4cda5990b..420c83b38 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -293,7 +293,7 @@ QHostInfo::QHostInfo(int id) Constructs a copy of \a other. */ QHostInfo::QHostInfo(const QHostInfo &other) - : d(new QHostInfoPrivate(*other.d)) + : d(new QHostInfoPrivate(*other.d.data())) { } @@ -303,7 +303,7 @@ QHostInfo::QHostInfo(const QHostInfo &other) */ QHostInfo &QHostInfo::operator=(const QHostInfo &other) { - d = other.d; + *d.data() = *other.d.data(); return *this; } @@ -312,7 +312,6 @@ QHostInfo &QHostInfo::operator=(const QHostInfo &other) */ QHostInfo::~QHostInfo() { - delete d; } /*! diff --git a/src/network/kernel/qhostinfo.h b/src/network/kernel/qhostinfo.h index a72b167d0..f3d80ab56 100644 --- a/src/network/kernel/qhostinfo.h +++ b/src/network/kernel/qhostinfo.h @@ -43,6 +43,7 @@ #define QHOSTINFO_H #include +#include #include QT_BEGIN_HEADER @@ -90,7 +91,7 @@ public: static QString localDomainName(); private: - QHostInfoPrivate* d; + QScopedPointer d; }; QT_END_NAMESPACE diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp index a0241d15d..8efdbfcf7 100644 --- a/src/network/kernel/qnetworkinterface.cpp +++ b/src/network/kernel/qnetworkinterface.cpp @@ -165,7 +165,7 @@ QNetworkAddressEntry::QNetworkAddressEntry() object \a other. */ QNetworkAddressEntry::QNetworkAddressEntry(const QNetworkAddressEntry &other) - : d(new QNetworkAddressEntryPrivate(*other.d)) + : d(new QNetworkAddressEntryPrivate(*other.d.data())) { } @@ -174,7 +174,7 @@ QNetworkAddressEntry::QNetworkAddressEntry(const QNetworkAddressEntry &other) */ QNetworkAddressEntry &QNetworkAddressEntry::operator=(const QNetworkAddressEntry &other) { - d = other.d; + *d.data() = *other.d.data(); return *this; } @@ -183,7 +183,6 @@ QNetworkAddressEntry &QNetworkAddressEntry::operator=(const QNetworkAddressEntry */ QNetworkAddressEntry::~QNetworkAddressEntry() { - delete d; } /*! diff --git a/src/network/kernel/qnetworkinterface.h b/src/network/kernel/qnetworkinterface.h index 71045b3b9..89ef35066 100644 --- a/src/network/kernel/qnetworkinterface.h +++ b/src/network/kernel/qnetworkinterface.h @@ -43,6 +43,7 @@ #define QNETWORKINTERFACE_H #include +#include #include #ifndef QT_NO_NETWORKINTERFACE @@ -78,7 +79,7 @@ public: void setBroadcast(const QHostAddress &newBroadcast); private: - QNetworkAddressEntryPrivate* d; + QScopedPointer d; }; class QNetworkInterfacePrivate; diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 15bbba3cd..9bad5b3bf 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -58,7 +58,6 @@ #include "qendian.h" #include "qnetworkinterface.h" #include "qnetworkcommon_p.h" -#include "qscopedpointer.h" QT_BEGIN_NAMESPACE diff --git a/src/network/ssl/qsslcipher.cpp b/src/network/ssl/qsslcipher.cpp index d53a4033d..34ada721d 100644 --- a/src/network/ssl/qsslcipher.cpp +++ b/src/network/ssl/qsslcipher.cpp @@ -103,7 +103,7 @@ QSslCipher::QSslCipher(const QString &name, QSsl::SslProtocol protocol) QSslCipher::QSslCipher(const QSslCipher &other) : d(new QSslCipherPrivate) { - d = other.d; + *d.data() = *other.d.data(); } /*! @@ -111,7 +111,6 @@ QSslCipher::QSslCipher(const QSslCipher &other) */ QSslCipher::~QSslCipher() { - delete d; } /*! @@ -120,7 +119,7 @@ QSslCipher::~QSslCipher() */ QSslCipher &QSslCipher::operator=(const QSslCipher &other) { - d = other.d; + *d.data() = *other.d.data(); return *this; } diff --git a/src/network/ssl/qsslcipher.h b/src/network/ssl/qsslcipher.h index c28b75f50..37e61cbac 100644 --- a/src/network/ssl/qsslcipher.h +++ b/src/network/ssl/qsslcipher.h @@ -44,6 +44,7 @@ #define QSSLCIPHER_H #include +#include #include QT_BEGIN_HEADER @@ -74,7 +75,7 @@ public: QSsl::SslProtocol protocol() const; private: - QSslCipherPrivate* d; + QScopedPointer d; friend class QSslSocketBackendPrivate; }; diff --git a/src/network/ssl/qsslerror.cpp b/src/network/ssl/qsslerror.cpp index 6e21cd0c3..234916864 100644 --- a/src/network/ssl/qsslerror.cpp +++ b/src/network/ssl/qsslerror.cpp @@ -107,8 +107,34 @@ public: }; /*! - Constructs a QSslError object. The two arguments specify the - \a error that occurred, and which \a certificate the error relates to. + Constructs a QSslError object with no error and default certificate. + +*/ + +// RVCT compiler in debug build does not like about default values in const- +// So as an workaround we define all constructor overloads here explicitly +QSslError::QSslError() + : d(new QSslErrorPrivate) +{ + d->error = QSslError::NoError; + d->certificate = QSslCertificate(); +} + +/*! + Constructs a QSslError object. The argument specifies the \a + error that occurred. + +*/ +QSslError::QSslError(SslError error) + : d(new QSslErrorPrivate) +{ + d->error = error; + d->certificate = QSslCertificate(); +} + +/*! + Constructs a QSslError object. The two arguments specify the \a + error that occurred, and which \a certificate the error relates to. \sa QSslCertificate */ @@ -125,7 +151,7 @@ QSslError::QSslError(SslError error, const QSslCertificate &certificate) QSslError::QSslError(const QSslError &other) : d(new QSslErrorPrivate) { - d = other.d; + *d.data() = *other.d.data(); } /*! @@ -133,7 +159,6 @@ QSslError::QSslError(const QSslError &other) */ QSslError::~QSslError() { - delete d; } /*! @@ -143,7 +168,7 @@ QSslError::~QSslError() */ QSslError &QSslError::operator=(const QSslError &other) { - d = other.d; + *d.data() = *other.d.data(); return *this; } diff --git a/src/network/ssl/qsslerror.h b/src/network/ssl/qsslerror.h index d92f69829..0a75e596f 100644 --- a/src/network/ssl/qsslerror.h +++ b/src/network/ssl/qsslerror.h @@ -44,6 +44,7 @@ #define QSSLERROR_H #include +#include #include QT_BEGIN_HEADER @@ -83,7 +84,11 @@ public: UnspecifiedError = -1 }; - QSslError(SslError error = QSslError::NoError, const QSslCertificate &certificate = QSslCertificate()); + // RVCT compiler in debug build does not like about default values in const- + // So as an workaround we define all constructor overloads here explicitly + QSslError(); + QSslError(SslError error); + QSslError(SslError error, const QSslCertificate &certificate); QSslError(const QSslError &other); @@ -96,9 +101,9 @@ public: SslError error() const; QString errorString() const; QSslCertificate certificate() const; - + private: - QSslErrorPrivate* d; + QScopedPointer d; }; #ifndef QT_NO_DEBUG_STREAM