diff --git a/src/Mod/TechDraw/App/DrawViewDetail.cpp b/src/Mod/TechDraw/App/DrawViewDetail.cpp index af472ae57c..4e2fec4199 100644 --- a/src/Mod/TechDraw/App/DrawViewDetail.cpp +++ b/src/Mod/TechDraw/App/DrawViewDetail.cpp @@ -109,6 +109,11 @@ DrawViewDetail::DrawViewDetail() : DrawViewDetail::~DrawViewDetail() { + //don't delete this object while it still has dependent tasks running + if (m_detailFuture.isRunning()) { + Base::Console().Message("%s is waiting for detail cut to finish\n", getNameInDocument()); + m_detailFuture.waitForFinished(); + } } short DrawViewDetail::mustExecute() const diff --git a/src/Mod/TechDraw/App/DrawViewPart.cpp b/src/Mod/TechDraw/App/DrawViewPart.cpp index 02761ed1fb..0d181d1b72 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.cpp +++ b/src/Mod/TechDraw/App/DrawViewPart.cpp @@ -155,6 +155,15 @@ DrawViewPart::DrawViewPart(void) : DrawViewPart::~DrawViewPart() { + //don't delete this object while it still has dependent threads running + if (m_hlrFuture.isRunning()) { + Base::Console().Message("%s is waiting for HLR to finish\n", getNameInDocument()); + m_hlrFuture.waitForFinished(); + } + if (m_faceFuture.isRunning()) { + Base::Console().Message("%S is waiting for face finding to finish\n", getNameInDocument()); + m_faceFuture.waitForFinished(); + } removeAllReferencesFromGeom(); delete geometryObject; } diff --git a/src/Mod/TechDraw/App/DrawViewSection.cpp b/src/Mod/TechDraw/App/DrawViewSection.cpp index b722e0d9a0..acd1c5021a 100644 --- a/src/Mod/TechDraw/App/DrawViewSection.cpp +++ b/src/Mod/TechDraw/App/DrawViewSection.cpp @@ -149,6 +149,11 @@ DrawViewSection::DrawViewSection() : DrawViewSection::~DrawViewSection() { + //don't destroy this object while it has dependent threads running + if (m_cutFuture.isRunning()) { + Base::Console().Message("%s is waiting for tasks to complete\n", getNameInDocument()); + m_cutFuture.waitForFinished(); + } } short DrawViewSection::mustExecute() const