Don't manage _sendData's memory

This commit is contained in:
Clement 2019-08-07 15:03:01 -07:00
parent ec9d13700d
commit b2704da9ef
2 changed files with 20 additions and 33 deletions

View file

@ -30,30 +30,14 @@ Q_DECLARE_METATYPE(QByteArray*)
XMLHttpRequestClass::XMLHttpRequestClass(QScriptEngine* engine) : XMLHttpRequestClass::XMLHttpRequestClass(QScriptEngine* engine) :
_engine(engine), _engine(engine),
_async(true), _timer(this) {
_url(),
_method(""),
_responseType(""),
_request(),
_reply(NULL),
_sendData(NULL),
_rawResponseData(),
_responseData(""),
_onTimeout(QScriptValue::NullValue),
_onReadyStateChange(QScriptValue::NullValue),
_readyState(XMLHttpRequestClass::UNSENT),
_errorCode(QNetworkReply::NoError),
_timeout(0),
_timer(this),
_numRedirects(0) {
_request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); _request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
_timer.setSingleShot(true); _timer.setSingleShot(true);
} }
XMLHttpRequestClass::~XMLHttpRequestClass() { XMLHttpRequestClass::~XMLHttpRequestClass() {
if (_reply) { delete _reply; } if (_reply) { _reply->deleteLater(); }
if (_sendData) { delete _sendData; }
} }
QScriptValue XMLHttpRequestClass::constructor(QScriptContext* context, QScriptEngine* engine) { QScriptValue XMLHttpRequestClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@ -169,13 +153,12 @@ void XMLHttpRequestClass::send() {
void XMLHttpRequestClass::send(const QScriptValue& data) { void XMLHttpRequestClass::send(const QScriptValue& data) {
if (_readyState == OPENED && !_reply) { if (_readyState == OPENED && !_reply) {
if (!data.isNull()) { if (!data.isNull()) {
_sendData = new QBuffer(this);
if (data.isObject()) { if (data.isObject()) {
QByteArray ba = qscriptvalue_cast<QByteArray>(data); _sendData = qscriptvalue_cast<QByteArray>(data);
_sendData->setData(ba);
} else { } else {
_sendData->setData(data.toString().toUtf8()); _sendData = data.toString().toUtf8();
} }
} }
@ -235,6 +218,10 @@ void XMLHttpRequestClass::requestFinished() {
} }
} }
disconnectFromReply(_reply);
_reply->deleteLater();
_reply = nullptr;
setReadyState(DONE); setReadyState(DONE);
emit requestComplete(); emit requestComplete();
} }
@ -246,7 +233,7 @@ void XMLHttpRequestClass::abortRequest() {
disconnectFromReply(_reply); disconnectFromReply(_reply);
_reply->abort(); _reply->abort();
_reply->deleteLater(); _reply->deleteLater();
_reply = NULL; _reply = nullptr;
} }
} }

View file

@ -98,23 +98,23 @@ private:
void disconnectFromReply(QNetworkReply* reply); void disconnectFromReply(QNetworkReply* reply);
void abortRequest(); void abortRequest();
QScriptEngine* _engine; QScriptEngine* _engine { nullptr };
bool _async; bool _async { true };
QUrl _url; QUrl _url;
QString _method; QString _method;
QString _responseType; QString _responseType;
QNetworkRequest _request; QNetworkRequest _request;
QNetworkReply* _reply; QNetworkReply* _reply { nullptr };
QBuffer* _sendData; QByteArray _sendData;
QByteArray _rawResponseData; QByteArray _rawResponseData;
QScriptValue _responseData; QScriptValue _responseData;
QScriptValue _onTimeout; QScriptValue _onTimeout { QScriptValue::NullValue };
QScriptValue _onReadyStateChange; QScriptValue _onReadyStateChange { QScriptValue::NullValue };
ReadyState _readyState; ReadyState _readyState { XMLHttpRequestClass::UNSENT };
QNetworkReply::NetworkError _errorCode; QNetworkReply::NetworkError _errorCode { QNetworkReply::NoError };
int _timeout; int _timeout { 0 };
QTimer _timer; QTimer _timer;
int _numRedirects; int _numRedirects { 0 };
private slots: private slots:
void requestFinished(); void requestFinished();