diff --git a/src/libs/utils/runextensions.cpp b/src/libs/utils/runextensions.cpp index 4fff2612a60..69cb3882e85 100644 --- a/src/libs/utils/runextensions.cpp +++ b/src/libs/utils/runextensions.cpp @@ -39,7 +39,6 @@ void RunnableThread::run() m_runnable->run(); if (m_runnable->autoDelete()) delete m_runnable; - deleteLater(); } } // Internal diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h index 775d61af30f..9984a4b72cb 100644 --- a/src/libs/utils/runextensions.h +++ b/src/libs/utils/runextensions.h @@ -682,7 +682,10 @@ QFuture runAsync(Function &&function, Args&&... args) auto job = new Internal::AsyncJob (std::forward(function), std::forward(args)...); QFuture future = job->future(); - (new Internal::RunnableThread(job))->start(); // automatically deletes itself + auto thread = new Internal::RunnableThread(job); + thread->moveToThread(qApp->thread()); // make sure thread gets deleteLater on main thread + QObject::connect(thread, &QThread::finished, thread, &QObject::deleteLater); + thread->start(); return future; }