KDirWatch issue

Albert Astals Cid aacid at kde.org
Wed May 3 10:05:47 UTC 2017


El dimecres, 3 de maig de 2017, a les 11:53:02 CEST, Albert Astals Cid va 
escriure:
> El dilluns, 24 d’abril de 2017, a les 20:08:26 CEST, Martin Koller va
> 
> escriure:
> > Hi,
> > 
> > just wondering if I'm doing something wrong or there really is a bug in
> > KDirWatch (I'm on openSuse Leap 42.2, KF5 5.33.0)
> > 
> > From the docs I understand that when I call
> > 
> > KDirWatch::stopDirScan(dir);
> > ... create files in the dir ...
> > KDirWatch::restartDirScan(dir)
> > 
> > it should not emit the dirty signal when I run this, right ?
> 
> Correct.
> 
> > Well, it does.
> > I've attached a small test.
> 
> Yeah :/
> 
> > When I modify the code and use stopScan() ... create ... startScan()
> > I still receive the dirty signal with the path to the file I created.
> 
> stopScan and startScan are just shorthand for stopDirScan and restartDirScan
> for every dir, so that is why it behaves the same, because it's really the
> same code.
> 
> > Only way it works without signal is
> > removeDir(dir) ... create ... addDir(dir)
> > 
> > Is this how it's supposed to work ?
> 
> The problem is at the moment the flow is like this
>  * Stop scanning
>  * Create File
>  * Restart scanning
>  * inotify socket gets notified of changes, since you already restarted the
> scanning, you get notified
> 
> 
> The only thing i can think of we could do to fix this is manually read from
> the socket when stopping/restarting the scan so that things get triggered in
> order, but after doing that it still doesn't work as expected.
> 
> I could try to spend more time (and making the code more complex) to work,
> but then i thought, what's the point? We already have removeDir/addDir that
> works.
> 
> So I tried finding why we have these two methods that do the same thing but
> in different ways, and sadly I couldn't find enough info in the git
> history.
> 
> My guess is that it may be because at some point it was thought that
> stopDirScan would be more efficient than removeDir.
> 
> Given that stopDirScan doesn't work, is not unit tested 

Wrong wording here, stopDirScan is unit tested, but doesn't test the full 
behaviour.

Cheers,
  Albert

> and actually almost
> noone uses it
>   https://lxr.kde.org/search?_string=stopDirScan
> my suggestion is to simply mark stopDirScan as deprecated and make it call
> removeDir
> 
> Opinions?
> 
> Cheers,
>   Albert




More information about the Kde-frameworks-devel mailing list