[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive/Applications/16.12] src: Fix crash when closing a document that was still creating thumbs
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2016-12-03 15:39:55
Message-ID: E1cDCPr-0008Hi-Th () code ! kde ! org
[Download RAW message or body]
Git commit 336e3d2baf10d845cc7d14bccb3164ac1f8b6957 by Jean-Baptiste Mardelle.
Committed on 03/12/2016 at 15:39.
Pushed by mardelle into branch 'Applications/16.12'.
Fix crash when closing a document that was still creating thumbs
M +26 -16 src/bin/bin.cpp
M +2 -0 src/bin/bin.h
M +1 -1 src/doc/kdenlivedoc.cpp
M +1 -1 src/project/projectmanager.cpp
https://commits.kde.org/kdenlive/336e3d2baf10d845cc7d14bccb3164ac1f8b6957
diff --git a/src/bin/bin.cpp b/src/bin/bin.cpp
index 90f313f..2a45358 100644
--- a/src/bin/bin.cpp
+++ b/src/bin/bin.cpp
@@ -495,22 +495,7 @@ Bin::~Bin()
blockSignals(true);
m_proxyModel->selectionModel()->blockSignals(true);
setEnabled(false);
- abortAudioThumbs();
- if (m_propertiesPanel) {
- foreach (QWidget * w, \
m_propertiesPanel->findChildren<ClipPropertiesController*>()) {
- delete w;
- }
- }
- if (m_rootFolder) {
- while (!m_rootFolder->isEmpty()) {
- AbstractProjectItem *child = m_rootFolder->at(0);
- m_rootFolder->removeChild(child);
- delete child;
- }
- }
- delete m_rootFolder;
- delete m_itemView;
- delete m_jobManager;
+ abortOperations();
delete m_infoMessage;
delete m_propertiesPanel;
}
@@ -551,6 +536,31 @@ void Bin::processAudioThumbs()
m_audioThumbsThread = QtConcurrent::run(this, &Bin::slotCreateAudioThumbs);
}
+void Bin::abortOperations()
+{
+ blockSignals(true);
+ abortAudioThumbs();
+ if (m_propertiesPanel) {
+ foreach (QWidget * w, \
m_propertiesPanel->findChildren<ClipPropertiesController*>()) { + delete \
w; + }
+ }
+ if (m_rootFolder) {
+ while (!m_rootFolder->isEmpty()) {
+ AbstractProjectItem *child = m_rootFolder->at(0);
+ m_rootFolder->removeChild(child);
+ delete child;
+ }
+ }
+ delete m_rootFolder;
+ m_rootFolder = NULL;
+ delete m_itemView;
+ m_itemView = NULL;
+ delete m_jobManager;
+ m_jobManager = NULL;
+ blockSignals(false);
+}
+
void Bin::abortAudioThumbs()
{
if (!m_audioThumbsThread.isRunning()) return;
diff --git a/src/bin/bin.h b/src/bin/bin.h
index 5f033d5..f1978be 100644
--- a/src/bin/bin.h
+++ b/src/bin/bin.h
@@ -647,6 +647,8 @@ public slots:
void slotGetCurrentProjectImage(bool request);
void slotExpandUrl(ItemInfo info, QUrl url, QUndoCommand *command);
void abortAudioThumbs();
+ /** @brief Abort all ongoing operations to prepare close. */
+ void abortOperations();
void doDisplayMessage(const QString &text, KMessageWidget::MessageType type, \
QList <QAction*> actions = QList <QAction*>()); /** @brief Reset all clip usage to 0 \
*/ void resetUsageCount();
diff --git a/src/doc/kdenlivedoc.cpp b/src/doc/kdenlivedoc.cpp
index 328d102..412a607 100644
--- a/src/doc/kdenlivedoc.cpp
+++ b/src/doc/kdenlivedoc.cpp
@@ -1456,7 +1456,7 @@ void KdenliveDoc::loadDocumentProperties()
void KdenliveDoc::updateProjectProfile(bool reloadProducers)
{
- pCore->bin()->abortAudioThumbs();
+ pCore->bin()->abortOperations();
pCore->producerQueue()->abortOperations();
KdenliveSettings::setProject_display_ratio((double) m_profile.display_aspect_num \
/ m_profile.display_aspect_den);
double fps = (double) m_profile.frame_rate_num / m_profile.frame_rate_den;
diff --git a/src/project/projectmanager.cpp b/src/project/projectmanager.cpp
index 6b1d184..2ff6d84 100644
--- a/src/project/projectmanager.cpp
+++ b/src/project/projectmanager.cpp
@@ -255,7 +255,7 @@ bool ProjectManager::closeCurrentDocument(bool saveChanges, bool \
quit) m_autoSaveTimer.stop();
if (m_project) {
pCore->producerQueue()->abortOperations();
- pCore->bin()->abortAudioThumbs();
+ pCore->bin()->abortOperations();
pCore->window()->slotTimelineClipSelected(NULL, false);
pCore->monitorManager()->clipMonitor()->slotOpenClip(NULL);
pCore->window()->m_effectStack->clear();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic