Review Request: Fix for a couple of KIO put-slave-on-hold bugs

Andreas Hartmetz ahartmetz at gmail.com
Thu Apr 28 23:44:21 BST 2011


On Thursday 28 April 2011 16:05:51 Dawit Alemayehu wrote:
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/101244/
> -----------------------------------------------------------
> 
> (Updated April 28, 2011, 2:05 p.m.)
> 
> 
> Review request for kdelibs.
> 
> 
> Changes
> -------
> 
> Removed the m_ignoreOnHoldListChanged flag per discussion with David.
> 
> 
> Summary
> -------
> 
> The attached patch address a couple of bugs in the KIO put-slave-on-hold
> functionality:
> 
> Problem:
> ======
> #1. If a user clicks a link on a page, e.g.
> ftp://ftp.kde.org/pub/kde/README_UPLOAD, then KRun will first issue a get
> (CMD_GET) to determine its content-type and put the ioslave on hold so
> that the application associated with the returned content-type can handle
> it. In case of our example that would be kate/kwrite. Unfortunately, the
> ioslave put on hold will not be reused because almost all applications
> will use KIO::file_copy (CMD_COPY) to make a local copy before opening it.
> Even then for ioslaves that do not optimize their copy command, the call
> to KIO::file_copy will properly reuse the ioslave on hold so long as it do
> not have an optimized copying method like the ftp ioslave.
> 
> #2. If a user types a web address, e.g. www.kde.org, into KRunner to open
> it in Konqueror and repeats the same process with another address, then
> whether the ioslave put on hold the second time around will get reused or
> not depends how the application works. If the application allows multiple
> documents or tabs and opens the second url as in the already running
> instance, then the ioslave on hold will NOT be reused the second time
> around.
> 
> Solution:
> ======
> #1. Simply force the KIO::file_copy call not to do the optimized copying if
> there is a slave on hold for the request. This will force it to use two
> separate jobs, KIO::get (CMD_GET) and KIO::put (CMD_PUT) ensuring the
> reuse of the ioslave that was put on hold.
> 
> #2. Whenever a call to KIO::Scheduler::publishSlaveOnHold is made, send a
> dbus message to update all the other scheduler so that they can look for
> an ioslave-on-hold to service the next request.
> 
> 
> Diffs (updated)
> -----
> 
>   kio/kio/job.cpp e34f562
>   kio/kio/scheduler.h 9be9db0
>   kio/kio/scheduler.cpp 4cb33d1
> 
> Diff: http://git.reviewboard.kde.org/r/101244/diff
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Dawit

The previous slave-on-hold patches trigger a -probably- previously existing 
job accounting bug in the scheduler that was hidden before due to the mostly 
non-working state of the slave-on-hold mechanism. AFAICS this bug was present 
before my scheduler rewrite where I tried not to change anything I didn't 
completely understand.
After enabling SCHEDULER_DEBUG I get the following debug output from 
konqueror:

konqueror(5203)/kio (Scheduler) KIO::ProtoQueue::startAJob: 
m_runningJobsCount: 3

while some jobs stall and websites don't load. I can trigger this by running 
e.g. konqueror http://paste.kde.org/39121/ (unrelated paste).
The bug is probably somewhere in KIO::SchedulerPrivate::putSlaveOnHold(),
publishSlaveOnHold(), or heldSlaveForJob(). The job's slave is never marked as 
idle or not idle in any of these methods and it probably should be, somewhere.

Please take care of this before you continue. I know it's not really "your" 
bug, but it's probably not really "mine" either.
Contact me if you'd prefer me to have a look. I am trying not to spend much 
time on coding right now so I can spend more time on university stuff.

Cheers,
Andreas




More information about the kde-core-devel mailing list