diff --git a/src/core/slavebase.cpp b/src/core/slavebase.cpp --- a/src/core/slavebase.cpp +++ b/src/core/slavebase.cpp @@ -213,6 +213,16 @@ } } + void verfifyFinishedNotCalled(const char *cmdName) + { + KIO_STATE_ASSERT(m_state != FinishedCalled, + Q_FUNC_INFO, + qUtf8Printable(QStringLiteral("%1 called finished(), but it's not supposed to! Please fix the %2 KIO slave") + .arg(cmdName) + .arg(QCoreApplication::applicationName()))); + } + + void verifyErrorFinishedNotCalled(const char *cmdName) { KIO_STATE_ASSERT(!finalState(), @@ -1179,6 +1189,7 @@ QIODevice::OpenMode mode = QFlag(i); d->m_state = d->InsideMethod; open(url, mode); //krazy:exclude=syscalls + d->verfifyFinishedNotCalled("open()"); d->m_state = d->Idle; } break; case CMD_PUT: { @@ -1362,22 +1373,26 @@ KIO::filesize_t bytes; stream >> bytes; read(bytes); + d->verfifyFinishedNotCalled("read()"); break; } case CMD_WRITE: { write(data); + d->verfifyFinishedNotCalled("write()"); break; } case CMD_SEEK: { KIO::filesize_t offset; stream >> offset; seek(offset); + d->verfifyFinishedNotCalled("seek()"); break; } case CMD_NONE: break; case CMD_CLOSE: close(); // must call finish(), which will set d->inOpenLoop=false + d->verifyState("close()"); break; default: // Some command we don't understand.