Review Request 118458: Fix KDirWatch to act more reliably against various backends.

David Faure faure at kde.org
Wed Jun 4 07:38:49 UTC 2014


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


Very good to see that it brings the FAM backend to be more in line with the others, behavior-wise.

Just a few small issues.


autotests/kdirwatch_unittest.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41151>

    It seems that the second call should pass "created(QString)" rather than "deleted(QString)".



autotests/kdirwatch_unittest.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41152>

    The commit log doesn't mention any changes related to QFileSystemWatcher, only to the FAM backend. Are you sure you wanted to commit this? If it works then of course I'm happy with it (but maybe in a separate commit then)



autotests/kdirwatch_unittest.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41153>

    This could actually use QFile::link(), would be more readable.



src/lib/io/kdirwatch.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41154>

    I'm not 100% sure about the meaning of this boolean variable. (we started an event?)
    Maybe it can be called something more explicit (waitForInitialFAMEvents? or something that makes sense to you ;))



src/lib/io/kdirwatch.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41155>

    Technically this could be an event about a completely unrelated file to the one we're waiting to see, couldn't it?
    



src/lib/io/kdirwatch.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41156>

    For performance reasons it was good for this check to be as early as possible. But of course the risk is an infinite loop if we wait to "see" such a file and we never see it. The solution could be to ensure that we never start watching such a file in the first place...
    Anyhow, not a blocker.



src/lib/io/kdirwatch.cpp
<https://git.reviewboard.kde.org/r/118458/#comment41157>

    actual -> actually ?


- David Faure


On June 1, 2014, 9:03 p.m., Matthew Dawson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/118458/
> -----------------------------------------------------------
> 
> (Updated June 1, 2014, 9:03 p.m.)
> 
> 
> Review request for KDE Frameworks.
> 
> 
> Bugs: 329802
>     https://bugs.kde.org/show_bug.cgi?id=329802
> 
> 
> Repository: kcoreaddons
> 
> 
> Description
> -------
> 
> Fix KDirWatch to act more reliably against various backends.
> 
>  - When KDirWatch used a FAM backend, it wouldn't actually wait for the
> necessary watches to be put in place before returning, allowing for a race
> where an application may think a watch is in place when it really isn't.
> This was easily seen using gamin and running the testDeleteAndRecreateFile
> test.  Fix by delaying useFAM until the watch is in place by waiting until
> the EndExist FAM event is received.  This adds ~100-200ms per watch with
> gamin.
>  - When a file is deleted and recreated, and scanEntry detects it, the dirty
> signal would be emitted.  Fix to emit a deleted + created signal, as expected.
>  - When a deleted signal was requested, other signals were dropped.  Due to
> the above point, this would stop the created signal from being emitted.  Now,
> all signals are emitted, even when a delete is detected.
>  - When watching recreated files, the created signal could get lost as there
> was a race between when the created signal would be generated and its signal
> spy would be created.  Fix by making sure the spy is created before the signal
> could be emitted.
>  - Make sure the created signal isn't emitted twice with both FAM and the
> polling timer.  This occurs as FAM doesn't fix up the fact the entry has been
> created, and the poller thus assumes it needs to notify the world.  Fix by
> having FAM not emit the event in this case.
> 
> BUG: 329802
> 
> Note that due to a bug in the FAM daemon (which doesn't exist in the gamin daemon), the testDeleteAndRecreateDir unit test fails as FAM doesn't detect the folder deletion.  This test previously passed due to the race condition outlined in bug 329802, which was fixed in this RR.  I've confirmed this is a bug in FAM using a minimal program talking directly to the daemon, and watching the strace output from FAM.  FAM doesn't detect when a folder it is watching directly is deleted.  It does detect when a folder inside a folder it is watching is deleted, however.
> I think this should go in as is, as the unit test failing exposes the actual problem, instead of hiding behind a race when it doesn't really work.  If running against FAM is important, I can see about tracking down the issue.
> 
> 
> Diffs
> -----
> 
>   autotests/kdirwatch_unittest.cpp 4e638e089012276dc8b17b9d960732a161cc3be1 
>   src/lib/io/kdirwatch.cpp cc6feec4d2b2598e50c853172bbc295a8c719bc2 
>   src/lib/io/kdirwatch_p.h cf63c41745091cfedcf1b27c9e4aa77d3db6b31a 
> 
> Diff: https://git.reviewboard.kde.org/r/118458/diff/
> 
> 
> Testing
> -------
> 
> Unit tests all pass now with gamin.  Using FAM, one test fails as described above, but I've confirmed the daemon itself is causing the issue.
> 
> 
> Thanks,
> 
> Matthew Dawson
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20140604/2b5c5916/attachment-0001.html>


More information about the Kde-frameworks-devel mailing list