Merge pull request #8778 from Atlante45/asset-client

Fix crash in AssetClient handleProgressCallback
This commit is contained in:
Stephen Birarda 2016-10-11 18:36:23 -07:00 committed by GitHub
commit 33e426bfd2
4 changed files with 14 additions and 15 deletions

View file

@ -141,7 +141,11 @@ bool haveAssetServer() {
} }
GetMappingRequest* AssetClient::createGetMappingRequest(const AssetPath& path) { GetMappingRequest* AssetClient::createGetMappingRequest(const AssetPath& path) {
return new GetMappingRequest(path); auto request = new GetMappingRequest(path);
request->moveToThread(thread());
return request;
} }
GetAllMappingsRequest* AssetClient::createGetAllMappingsRequest() { GetAllMappingsRequest* AssetClient::createGetAllMappingsRequest() {
@ -305,7 +309,7 @@ void AssetClient::handleAssetGetInfoReply(QSharedPointer<ReceivedMessage> messag
void AssetClient::handleAssetGetReply(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) { void AssetClient::handleAssetGetReply(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
Q_ASSERT(QThread::currentThread() == thread()); Q_ASSERT(QThread::currentThread() == thread());
auto assetHash = message->read(SHA256_HASH_LENGTH); auto assetHash = message->readHead(SHA256_HASH_LENGTH);
qCDebug(asset_client) << "Got reply for asset: " << assetHash.toHex(); qCDebug(asset_client) << "Got reply for asset: " << assetHash.toHex();
MessageID messageID; MessageID messageID;
@ -349,8 +353,8 @@ void AssetClient::handleAssetGetReply(QSharedPointer<ReceivedMessage> message, S
} else { } else {
auto weakNode = senderNode.toWeakRef(); auto weakNode = senderNode.toWeakRef();
connect(message.data(), &ReceivedMessage::progress, this, [this, weakNode, messageID, length]() { connect(message.data(), &ReceivedMessage::progress, this, [this, weakNode, messageID, length](qint64 size) {
handleProgressCallback(weakNode, messageID, length); handleProgressCallback(weakNode, messageID, size, length);
}); });
connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID]() { connect(message.data(), &ReceivedMessage::completed, this, [this, weakNode, messageID]() {
handleCompleteCallback(weakNode, messageID); handleCompleteCallback(weakNode, messageID);
@ -358,7 +362,8 @@ void AssetClient::handleAssetGetReply(QSharedPointer<ReceivedMessage> message, S
} }
} }
void AssetClient::handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID, DataOffset length) { void AssetClient::handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID,
qint64 size, DataOffset length) {
auto senderNode = node.toStrongRef(); auto senderNode = node.toStrongRef();
if (!senderNode) { if (!senderNode) {
@ -381,13 +386,7 @@ void AssetClient::handleProgressCallback(const QWeakPointer<Node>& node, Message
} }
auto& callbacks = requestIt->second; auto& callbacks = requestIt->second;
auto& message = callbacks.message; callbacks.progressCallback(size, length);
if (!message) {
return;
}
callbacks.progressCallback(message->getSize(), length);
} }
void AssetClient::handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID) { void AssetClient::handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID) {

View file

@ -93,7 +93,7 @@ private:
bool cancelGetAssetRequest(MessageID id); bool cancelGetAssetRequest(MessageID id);
bool cancelUploadAssetRequest(MessageID id); bool cancelUploadAssetRequest(MessageID id);
void handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID, DataOffset length); void handleProgressCallback(const QWeakPointer<Node>& node, MessageID messageID, qint64 size, DataOffset length);
void handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID); void handleCompleteCallback(const QWeakPointer<Node>& node, MessageID messageID);
struct GetAssetRequestData { struct GetAssetRequestData {

View file

@ -61,7 +61,7 @@ void ReceivedMessage::appendPacket(NLPacket& packet) {
_data.append(packet.getPayload(), packet.getPayloadSize()); _data.append(packet.getPayload(), packet.getPayloadSize());
if (_numPackets % EMIT_PROGRESS_EVERY_X_PACKETS == 0) { if (_numPackets % EMIT_PROGRESS_EVERY_X_PACKETS == 0) {
emit progress(); emit progress(getSize());
} }
if (packet.getPacketPosition() == NLPacket::PacketPosition::LAST) { if (packet.getPacketPosition() == NLPacket::PacketPosition::LAST) {

View file

@ -78,7 +78,7 @@ public:
template<typename T> qint64 readHeadPrimitive(T* data); template<typename T> qint64 readHeadPrimitive(T* data);
signals: signals:
void progress(); void progress(qint64 size);
void completed(); void completed();
private slots: private slots: