Review Request 125613: Race condition and error notification loss in ListJob

Alberto Jiménez Ruiz albjimrui at gmail.com
Sat Oct 24 18:54:22 BST 2015


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/125613/
-----------------------------------------------------------

(Updated Oct. 24, 2015, 5:54 p.m.)


Status
------

This change has been marked as submitted.


Review request for kdelibs, Albert Astals Cid and David Faure.


Changes
-------

Submitted with commit e60e8b96b211290e330c7ff6a3b84b20ab85850d by David Faure on behalf of Alberto Jiménez Ruiz to branch KDE/4.14.


Bugs: 333436
    http://bugs.kde.org/show_bug.cgi?id=333436


Repository: kdelibs


Description
-------

Race condition and error notification loss in ListJob


Diffs
-----

  kio/kio/job.cpp 91712e3 
  kio/kio/jobclasses.h d771cfe 
  kio/tests/jobtest.h d3c552e 
  kio/tests/jobtest.cpp ee2677a 

Diff: https://git.reviewboard.kde.org/r/125613/diff/


Testing
-------

Update 1, added unittest
Changed condition of listjob slotresult finishing (When executed as a synchronous job, gets stuck in a eventloop)
Added setError to copyjob.


Tests done on Kubuntu 15.10:

With this folder structure in ~:
src
######c (Folder)
##############b (Folder chmod'ed to 700 and owned by root)
#######################d (10MB file made of /dev/urandom data)
##############a (10MB file made of /dev/urandom data)

Then, (as a normal user execute: "kioclient ~/src ~/dst")

Expected result: Notification that some files were not able to be copied (Cannot access "b" folder)
Result with latest kdelibs: Silent copying where b folder is owned by user but nothing inside.
---When all kdebugdialog flags are set, a backtrace is also seen.
      
subError notifications for listjob subjobs are lost, Copyjob uses this signal to skip data.

Also, this fix prevents a race condition. 

ListJob has another ListJob as a subjob.

Chaild fails for whatever reason and calls error, which calls slotError, which calls slotsFinished and emitResult.
The result of the child gets collected by parent. slotResult of parent gets called, removes subjob and emitsresult because there are no subjobs left.
---That's fine as long as the slave associated with the parent emits finished before the child fails. If it doesn't, parent calls emitsResult twice.


Result after patch: kioclient shows a MessageBox telling the copy operation could not be completed.


Thanks,

Alberto Jiménez Ruiz

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20151024/d21f65e0/attachment.htm>


More information about the kde-core-devel mailing list