From 863d6fd872e2832434fcd1b748ca9b3ec81ae686 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 6 Jan 2012 10:30:26 +0100 Subject: [PATCH] Find clip from clipmanager instead of parsing tree widget when possible might fix concurrency crash http://kdenlive.org/mantis/view.php?id=2471 --- src/projectlist.cpp | 24 ++++++++++++------------ src/projectlist.h | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 7aba4bc2..db356c2c 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -301,7 +301,7 @@ ProjectList::ProjectList(QWidget *parent) : connect(this, SIGNAL(cancelRunningJob(const QString, stringMap )), this, SLOT(slotCancelRunningJob(const QString, stringMap))); connect(this, SIGNAL(processLog(const QString, int , int, const QString)), this, SLOT(slotProcessLog(const QString, int , int, const QString))); - connect(this, SIGNAL(updateJobStatus(const QString &, int, int, const QString &, const QString &, const QString)), this, SLOT(slotUpdateJobStatus(const QString &, int, int, const QString &, const QString &, const QString))); + connect(this, SIGNAL(updateJobStatus(const QString, int, int, const QString, const QString, const QString)), this, SLOT(slotUpdateJobStatus(const QString, int, int, const QString, const QString, const QString))); connect(this, SIGNAL(gotProxy(const QString)), this, SLOT(slotGotProxyForId(const QString))); @@ -2815,10 +2815,10 @@ void ProjectList::slotProcessJobs() break; } QString destination = job->destination(); - // Check if the clip is still here - ProjectItem *processingItem = getItemById(job->clipId()); - if (processingItem == NULL) { + DocClipBase *currentClip = m_doc->clipManager()->getClipById(job->clipId()); + //ProjectItem *processingItem = getItemById(job->clipId()); + if (currentClip == NULL) { job->setStatus(JOBDONE); continue; } @@ -2842,7 +2842,7 @@ void ProjectList::slotProcessJobs() if (job->jobType == MLTJOB) { MeltJob *jb = static_cast (job); - jb->setProducer(processingItem->referencedClip()->getProducer()); + jb->setProducer(currentClip->getProducer()); } job->startJob(); if (job->jobStatus == JOBDONE) { @@ -3125,11 +3125,11 @@ void ProjectList::slotCancelJobs() command->setText(i18np("Cancel job", "Cancel jobs", m_jobList.count())); m_jobMutex.lock(); for (int i = 0; i < m_jobList.count(); i++) { - ProjectItem *item = getItemById(m_jobList.at(i)->clipId()); - if (!item || !item->referencedClip()) continue; + DocClipBase *currentClip = m_doc->clipManager()->getClipById(m_jobList.at(i)->clipId()); + if (!currentClip) continue; QMap newProps = m_jobList.at(i)->cancelProperties(); if (newProps.isEmpty()) continue; - QMap oldProps = item->referencedClip()->currentProperties(newProps); + QMap oldProps = currentClip->currentProperties(newProps); new EditClipCommand(this, m_jobList.at(i)->clipId(), oldProps, newProps, true, command); } m_jobMutex.unlock(); @@ -3146,9 +3146,9 @@ void ProjectList::slotCancelJobs() void ProjectList::slotCancelRunningJob(const QString id, stringMap newProps) { if (newProps.isEmpty() || m_closing) return; - ProjectItem *item = getItemById(id); - if (!item || !item->referencedClip()) return; - QMap oldProps = item->referencedClip()->currentProperties(newProps); + DocClipBase *currentClip = m_doc->clipManager()->getClipById(id); + if (!currentClip) return; + QMap oldProps = currentClip->currentProperties(newProps); if (newProps == oldProps) return; QMapIterator i(oldProps); EditClipCommand *command = new EditClipCommand(this, id, oldProps, newProps, true); @@ -3179,7 +3179,7 @@ void ProjectList::deleteJobsForClip(const QString &clipId) } } -void ProjectList::slotUpdateJobStatus(const QString &id, int type, int status, const QString &label, const QString &actionName, const QString details) +void ProjectList::slotUpdateJobStatus(const QString id, int type, int status, const QString label, const QString actionName, const QString details) { ProjectItem *item = getItemById(id); if (!item) return; diff --git a/src/projectlist.h b/src/projectlist.h index f172206c..7b0061a0 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -436,7 +436,7 @@ private slots: /** @brief Update a clip's job status. */ void slotProcessLog(const QString, int progress, int, const QString = QString()); /** @brief A clip job crashed, inform user. */ - void slotUpdateJobStatus(const QString &id, int type, int status, const QString &label, const QString &actionName, const QString details); + void slotUpdateJobStatus(const QString id, int type, int status, const QString label, const QString actionName, const QString details); void slotUpdateJobStatus(ProjectItem *item, int type, int status, const QString &label, const QString &actionName = QString(), const QString details = QString()); /** @brief Display error log for last failed job. */ void slotShowJobLog(); @@ -476,7 +476,7 @@ signals: void cancelRunningJob(const QString, stringMap); void processLog(const QString, int , int, const QString = QString()); void addClip(const QString, const QString &, const QString &); - void updateJobStatus(const QString, int, int, const QString &label = QString(), const QString &actionName = QString(), const QString details = QString()); + void updateJobStatus(const QString, int, int, const QString label = QString(), const QString actionName = QString(), const QString details = QString()); void gotProxy(const QString); void checkJobProcess(); /** @brief A Filter Job produced results, send them back to the clip. */ -- 2.39.2