Merge pull request from Atlante45/network_replies_cleanup

Windows crash fix
This commit is contained in:
Philip Rosedale 2015-01-09 07:42:36 -08:00
commit 285e588266
14 changed files with 45 additions and 6 deletions

View file

@ -184,6 +184,7 @@ void Agent::run() {
loop.exec();
QString scriptContents(reply->readAll());
delete reply;
qDebug() << "Downloaded script:" << scriptContents;

View file

@ -1736,6 +1736,9 @@ bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &u
connection->respond(HTTPConnection::StatusCode302, QByteArray(),
HTTPConnection::DefaultContentType, cookieHeaders);
delete tokenReply;
delete profileReply;
// we've redirected the user back to our homepage
return true;

View file

@ -3770,9 +3770,9 @@ void Application::parseVersionXml() {
QString latestVersion;
QUrl downloadUrl;
QString releaseNotes("Unavailable");
QObject* sender = QObject::sender();
QNetworkReply* sender = qobject_cast<QNetworkReply*>(QObject::sender());
QXmlStreamReader xml(qobject_cast<QNetworkReply*>(sender));
QXmlStreamReader xml(sender);
while (!xml.atEnd() && !xml.hasError()) {
if (xml.tokenType() == QXmlStreamReader::StartElement && xml.name() == operatingSystem) {

View file

@ -158,6 +158,8 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) {
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
_scriptEditorWidgetUI->scriptEdit->setPlainText(reply->readAll());
delete reply;
if (!saveAs()) {
static_cast<ScriptEditorWindow*>(this->parent()->parent()->parent())->terminateCurrentTab();
}

View file

@ -148,6 +148,7 @@ void SnapshotShareDialog::postRequestFinished() {
QNetworkReply* requestReply = reinterpret_cast<QNetworkReply*>(sender());
QJsonDocument jsonResponse = QJsonDocument::fromJson(requestReply->readAll());
requestReply->deleteLater();
const QJsonObject& responseObject = jsonResponse.object();
if (responseObject.contains("id")) {

View file

@ -205,6 +205,7 @@ void BillboardOverlay::replyFinished() {
QNetworkReply* reply = static_cast<QNetworkReply*>(sender());
_billboard = reply->readAll();
_isLoaded = true;
reply->deleteLater();
}
bool BillboardOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction,

View file

@ -66,6 +66,7 @@ void ImageOverlay::replyFinished() {
_textureImage.loadFromData(rawData);
_renderImage = true;
_isLoaded = true;
reply->deleteLater();
}
void ImageOverlay::render(RenderArgs* args) {

View file

@ -80,6 +80,7 @@ void Sound::downloadFinished(QNetworkReply* reply) {
}
_isReady = true;
reply->deleteLater();
}
void Sound::downSample(const QByteArray& rawAudioByteArray) {

View file

@ -145,6 +145,7 @@ QString EntityTreeRenderer::loadScriptContents(const QString& scriptMaybeURLorTe
} else {
qDebug() << "ERROR Loading file:" << url.toString();
}
delete reply;
}
}

View file

@ -240,6 +240,7 @@ void DomainHandler::settingsRequestFinished() {
requestDomainSettings();
}
}
settingsReply->deleteLater();
}
void DomainHandler::parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket) {

View file

@ -67,13 +67,27 @@ QSharedPointer<Resource> ResourceCache::getResource(const QUrl& url, const QUrl&
_resources.insert(url, resource);
} else {
_unusedResources.remove(resource->getLRUKey());
removeUnusedResource(resource);
}
return resource;
}
void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource) {
static const int BYTES_PER_MEGABYTES = 1024 * 1024;
const int RETAINED_RESOURCE_COUNT = 50;
const int RETAINED_RESOURCE_SIZE = 100 * BYTES_PER_MEGABYTES;
while (_unusedResourcesTotalBytes + resource->getBytesTotal() > RETAINED_RESOURCE_SIZE &&
!_unusedResources.empty()) {
// unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
_unusedResourcesTotalBytes -= it.value()->getBytesTotal();
it.value()->setCache(NULL);
_unusedResources.erase(it);
}
if (_unusedResources.size() > RETAINED_RESOURCE_COUNT) {
// unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
@ -82,6 +96,14 @@ void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource)
}
resource->setLRUKey(++_lastLRUKey);
_unusedResources.insert(resource->getLRUKey(), resource);
_unusedResourcesTotalBytes += resource->getBytesTotal();
}
void ResourceCache::removeUnusedResource(const QSharedPointer<Resource>& resource) {
if (_unusedResources.contains(resource->getLRUKey())) {
_unusedResources.remove(resource->getLRUKey());
_unusedResourcesTotalBytes -= resource->getBytesTotal();
}
}
void ResourceCache::attemptRequest(Resource* resource) {

View file

@ -45,7 +45,8 @@ public:
void refresh(const QUrl& url);
protected:
qint64 _unusedResourcesTotalBytes = 0;
QMap<int, QSharedPointer<Resource> > _unusedResources;
/// Loads a resource from the specified URL.
@ -58,8 +59,9 @@ protected:
/// Creates a new resource.
virtual QSharedPointer<Resource> createResource(const QUrl& url,
const QSharedPointer<Resource>& fallback, bool delayLoad, const void* extra) = 0;
void addUnusedResource(const QSharedPointer<Resource>& resource);
void removeUnusedResource(const QSharedPointer<Resource>& resource);
static void attemptRequest(Resource* resource);
static void requestCompleted(Resource* resource);

View file

@ -194,6 +194,8 @@ void ScriptEngine::handleScriptDownload() {
qDebug() << "ERROR Loading file:" << reply->url().toString();
emit errorLoadingScript(_fileNameString);
}
reply->deleteLater();
}
void ScriptEngine::init() {
@ -605,6 +607,7 @@ void ScriptEngine::include(const QString& includeFile) {
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
includeContents = reply->readAll();
reply->deleteLater();
} else {
#ifdef _WIN32
QString fileName = url.toString();

View file

@ -332,7 +332,7 @@ void XMLHttpRequestClass::abortRequest() {
if (_reply) {
disconnectFromReply(_reply);
_reply->abort();
delete _reply;
_reply->deleteLater();
_reply = NULL;
}