cache: fixed race condition

This commit is contained in:
itsmattkc
2021-03-25 23:05:55 +11:00
parent 23b1226ef4
commit 3c2da0a966
2 changed files with 13 additions and 0 deletions
+12
View File
@@ -248,6 +248,7 @@ void PreviewAutoCacher::SingleFrameFinished()
RenderTicketWatcher* watcher = static_cast<RenderTicketWatcher*>(sender());
RenderTicketPtr passthrough = watcher->property("passthrough").value<RenderTicketPtr>();
passthrough->Finish(watcher->GetTicket()->Get(), watcher->GetTicket()->WasCancelled());
single_frame_tasks_.removeOne(watcher);
delete watcher;
}
@@ -498,6 +499,7 @@ void PreviewAutoCacher::TryRender()
watcher->setProperty("passthrough", QVariant::fromValue(single_frame_render_));
connect(watcher, &RenderTicketWatcher::Finished, this, &PreviewAutoCacher::SingleFrameFinished);
single_frame_tasks_.append(watcher);
single_frame_render_->Start();
@@ -604,6 +606,16 @@ void PreviewAutoCacher::SetViewerNode(Sequence *viewer_node)
// be in the cache for later use.
ClearVideoDownloadQueue(true);
// Wait for any single frame renders to finish
foreach (RenderTicketWatcher* watcher, single_frame_tasks_) {
watcher->Cancel();
watcher->WaitForFinished();
}
single_frame_tasks_.clear();
// Clear any single frame render that might be queued
single_frame_render_ = nullptr;
// No longer caching any hashes
currently_caching_hashes_.clear();
+1
View File
@@ -152,6 +152,7 @@ private:
QMap<RenderTicketWatcher*, TimeRange> audio_tasks_;
QMap<RenderTicketWatcher*, QByteArray> video_tasks_;
QMap<RenderTicketWatcher*, QByteArray> video_download_tasks_;
QVector<RenderTicketWatcher*> single_frame_tasks_;
QVector<QByteArray> currently_caching_hashes_;