diff --git a/src/core/scheduler.cpp b/src/core/scheduler.cpp --- a/src/core/scheduler.cpp +++ b/src/core/scheduler.cpp @@ -129,6 +129,11 @@ return false; } +void SlaveKeeper::clear() +{ + m_idleSlaves.clear(); +} + QList SlaveKeeper::allSlaves() const { return m_idleSlaves.values(); @@ -404,6 +409,7 @@ ProtoQueue::~ProtoQueue() { + m_slaveKeeper.clear(); Q_FOREACH (Slave *slave, allSlaves()) { // kill the slave process, then remove the interface in our process slave->kill(); diff --git a/src/core/scheduler_p.h b/src/core/scheduler_p.h --- a/src/core/scheduler_p.h +++ b/src/core/scheduler_p.h @@ -25,6 +25,7 @@ namespace KIO { +// The slave keeper manages the list of idle slaves that can be reused class SlaveKeeper : public QObject { Q_OBJECT @@ -37,6 +38,8 @@ KIO::Slave *takeSlaveForJob(KIO::SimpleJob *job); // remove slave from keeper bool removeSlave(KIO::Slave *slave); + // remove all slaves from keeper + void clear(); QList allSlaves() const; private: diff --git a/src/core/slave.cpp b/src/core/slave.cpp --- a/src/core/slave.cpp +++ b/src/core/slave.cpp @@ -300,7 +300,7 @@ if (!d->m_refCount) { d->connection->disconnect(this); this->disconnect(); - deleteLater(); + delete this; // yes it reads funny, but it's too late for a deleteLater() here, no event loop anymore } }