From 376c1cf2466a583ecc9187f8f95b613d9ed96f9c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 15 May 2023 17:54:23 +0200 Subject: [PATCH] FileStreamWriter: Add some comments into d'tor When d'tor of the parent Async runs, it busy waits for the WriteBuffer's thread to finish, and afterwards QObject's d'tor deletes the child WriteBuffer object. Change-Id: Ifc696b3e56735e697d8c54c2471f89e323d3c0d1 Reviewed-by: Reviewed-by: hjk Reviewed-by: Qt CI Bot --- src/libs/utils/filestreamer.cpp | 5 +++++ 1 file changed, 5 insertions(+) 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) {