diff --git a/src/libs/utils/filestreamer.cpp b/src/libs/utils/filestreamer.cpp index 55e984c2fbf..ababb94cf68 100644 --- a/src/libs/utils/filestreamer.cpp +++ b/src/libs/utils/filestreamer.cpp @@ -223,6 +223,11 @@ public: ~FileStreamWriter() { // TODO: should d'tor remove unfinished file write leftovers? if (m_writeBuffer && isBuffered()) m_writeBuffer->cancel(); + // m_writeBuffer is a child of either Process or Async. So, if m_writeBuffer + // is still alive now (in case when TaskTree::stop() was called), the FileStreamBase + // d'tor is going to delete m_writeBuffer later. In case of Async, coming from + // localTask(), the d'tor of Async, run by FileStreamBase, busy waits for the + // already canceled here WriteBuffer to finish before deleting WriteBuffer child. } void setWriteData(const QByteArray &writeData) {