On Wed, Aug 7, 2024 at 12:10 PM David Faure <fa...@kde.org> wrote: > > On mercredi 7 août 2024 11:54:20 heure d’été d’Europe centrale David Faure > wrote: > > On mercredi 7 août 2024 08:30:43 heure d’été d’Europe centrale Stefano > > Crocco > > wrote: > > > Hello to everyone, > > > while investigating a bug in Konqueror, I just found what in my opinion is > > > an unexpected behavior of KIO::MimeTypeFinderJob. If I'm reading the code > > > correctly, when it uses KIO::get() to determine the mimetype [1], it lets > > > the TransferJob go on even after it detected the mimetype. > > > > > > The documentation for KIO::get() states: > > > "Special case: if you want to determine the MIME type of the file first, > > > and then read it with the appropriate component, you can still use a > > > KIO::get() directly. When that job emits the mimeType signal, (which is > > > guaranteed to happen before it emits any data), put the job on hold". > > > Since the task of MimeTypeFinderJob is finding the mimetype of the URL, I > > > expected it would put the job on hold as soon as it has determined the > > > mimetype, coherently with the KIO::get() documentation. > > > > Right, that's what KRun::foundMimeType was doing, and I did that in > > MimeTypeFinderJob initially. > > > > But see commit 621585f0e818cd9f75cdd3bcc8665da7ac708283 > > and bug 452729. Seems weird. Talk to Harald ;) > > Of course in KF5 it was a bit different because another process could resume > the slave on hold, made available by klauncher. AFAIK nowadays that's gone so > resuming the slave on hold only works if the *same* process is going to fetch > that URL. I guess that's the issue. If another process gets started instead > (to open that URL in e.g. an image viewer), that slave on hold stays there > forever. We need a way to discard it then, somehow.
I don't see the problem. I mean, the docs are wrong, but beyond that? MimeTypeFinderJob is a KCompositeJob. It subjob()s the TransferJob. subjob calls setParent. When the MimeTypeFinderJob gets deleted the TransferJob gets deleted and that triggers the Scheduler to terminate the Worker process. HS