> On Oct. 12, 2015, 7:29 p.m., Albert Astals Cid wrote:
> > Do you think you can add an unittest for this or is it hard to recreate the 
> > conditionts?
> 
> Alberto Jiménez Ruiz wrote:
>     It happens to very few people. Most developers tried to reproduce bug 
> 333436 and bug 162211(I believe they are closely related) with no luck. The 
> heart of this bug is that sometimes a child ListJob fails silently and I 
> emulated an "error" making an unaccessable folder. A unit test for this would 
> need root privileges.
>     
>     When I ran across this bug copying stuff with dolphin, I tried to 
> recreate it copying folders thousands of times. I couldn't.
> 
> Albert Astals Cid wrote:
>     Why would you need test privileges to create a folder you can't access, 
> that's doable without being root, no?
> 
> Thomas Lübking wrote:
>     "Depends" - your file, your control.
>     You can remove and re-add permissions at will; kio might be too "smart 
> to" be challenged by permissions, but chattr might come to the rescue (ie. 
> turn the inaccessible file immutable - kio not smart enough for /that/ ;-)

chmodding to 000 works. I'm writing a unittest.

For completion, here's how I emulated it in KDE Plasma 5 (Kubuntu 15.10 beta) 
and KDE 4.X (It also happens)

#Perform on empty folder
#Activate in kdebugdialog kio (7007)

mkdir src
mkdir src/c
mkdir src/c/b
dd if=/dev/urandom of=src/c/a bs=1M count=10
dd if=/dev/urandom of=src/c/b/d bs=1M count=10
chmod 000 src/c/b

kioclient copy src dst

You should see:
klauncher(1553)/kio (KLauncher) KLauncher::requestSlave: KLauncher: launching 
new slave  "kio_file"  with protocol= "file"  args= ("file", 
"local:/run/user/1000/ksocket-alberto/klauncherhX1553.slave-socket", 
"local:/run/user/1000/ksocket-alberto/kioclientZT1614.slave-socket")
klauncher(1553)/kio (KLauncher) KLauncher::processRequestReturn: "kio_file" 
(pid 1615) up and running.
kioclient(1614)/kio (KIOJob) KIO::SlaveInterface::dispatch: error  111   
"/home/alberto/prueba2/dst"
klauncher(1553)/kio (KLauncher) KLauncher::requestSlave: KLauncher: launching 
new slave  "kio_file"  with protocol= "file"  args= ("file", 
"local:/run/user/1000/ksocket-alberto/klauncherhX1553.slave-socket", 
"local:/run/user/1000/ksocket-alberto/kioclientCj1614.slave-socket")
klauncher(1553)/kio (KLauncher) KLauncher::processRequestReturn: "kio_file" 
(pid 1616) up and running.
kioclient(1614)/kio (KIOJob) KIO::SlaveInterface::dispatch: error  117   
"/home/alberto/prueba2/src/c/b"
kioclient(1614)/kio (KIOJob) KIO::CopyJobPrivate::statCurrentSrc: Stating 
finished. To copy: 10506240 , available: 21012074496
kioclient(1614)/kio (KIOJob) KIO::SimpleJob::~SimpleJob: Killing job 
KIO::SimpleJob(0xf98e00) in destructor! "[
0: /usr/lib/libkdecore.so.5(kRealBacktrace(int)+0x50) [0x7f6948647c20]
1: /usr/lib/libkio.so.5(KIO::SimpleJob::~SimpleJob()+0xb7) [0x7f69491984f7]
2: /usr/lib/libkio.so.5(KIO::ListJob::~ListJob()+0x9) [0x7f6949198809]
3: /usr/lib/x86_64-linux-gnu/libQtCore.so.4(QObject::event(QEvent*)+0x1f8) 
[0x7f6947f76d28]
4: 
/usr/lib/x86_64-linux-gnu/libQtGui.so.4(QApplicationPrivate::notify_helper(QObject*,
 QEvent*)+0x8c) [0x7f69472a5cdc]
5: /usr/lib/x86_64-linux-gnu/libQtGui.so.4(QApplication::notify(QObject*, 
QEvent*)+0x2b6) [0x7f69472acc16]
6: 
/usr/lib/x86_64-linux-gnu/libQtCore.so.4(QCoreApplication::notifyInternal(QObject*,
 QEvent*)+0x8d) [0x7f6947f5c85d]
7: 
/usr/lib/x86_64-linux-gnu/libQtCore.so.4(QCoreApplicationPrivate::sendPostedEvents(QObject*,
 int, QThreadData*)+0x376) [0x7f6947f60316]
8: /usr/lib/x86_64-linux-gnu/libQtCore.so.4(+0x1bb07e) [0x7f6947f8d07e]
9: /lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x2a7) 
[0x7f6943111ff7]
10: /lib/x86_64-linux-gnu/libglib-2.0.so.0(+0x4a250) [0x7f6943112250]
11: /lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x2c) 
[0x7f69431122fc]
12: 
/usr/lib/x86_64-linux-gnu/libQtCore.so.4(QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x7e)
 [0x7f6947f8d1ee]
13: /usr/lib/x86_64-linux-gnu/libQtGui.so.4(+0x26fc26) [0x7f6947350c26]
14: 
/usr/lib/x86_64-linux-gnu/libQtCore.so.4(QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x41)
 [0x7f6947f5b0d1]
15: 
/usr/lib/x86_64-linux-gnu/libQtCore.so.4(QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)+0x1b5)
 [0x7f6947f5b445]
16: /usr/lib/x86_64-linux-gnu/libQtCore.so.4(QCoreApplication::exec()+0x99) 
[0x7f6947f61429]
17: kioclient() [0x404d64]
18: kioclient() [0x405faf]
19: kioclient() [0x403b5e]
20: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f69469b5a40]
21: kioclient(_start+0x29) [0x404599]
]
"


- Alberto


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


On Oct. 12, 2015, 7:11 p.m., Alberto Jiménez Ruiz wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/125613/
> -----------------------------------------------------------
> 
> (Updated Oct. 12, 2015, 7:11 p.m.)
> 
> 
> Review request for kdelibs.
> 
> 
> 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 
> 
> Diff: https://git.reviewboard.kde.org/r/125613/diff/
> 
> 
> Testing
> -------
> 
> 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
> 
>

Reply via email to