[Nepomuk] Review Request: FileWatch: Avoid calling the addWatch function recursively

Simeon Bird bladud at gmail.com
Sat Dec 1 06:06:21 UTC 2012



> On Dec. 1, 2012, 12:03 a.m., Vishesh Handa wrote:
> > services/filewatch/kinotify.cpp, line 203
> > <http://git.reviewboard.kde.org/r/107529/diff/1/?file=96932#file96932line203>
> >
> >     "Simeon: This should be easily fixed though. Just call FilterWatch in _k_add_Watches and only add the new iterator if it returns true."
> >     
> >     With a dir tree of 
> >     
> >     dir/sub
> >     dir2
> >     
> >     If dir is filtered, then addWatch( .. ) will return false and watches will not be added for their subdirectories.
> >     
> >     Or am I missing something? It's 5:30 am in the morning.

No, at the moment addWatch returns true unless there is an error: look at line 111 of kinotify. 

Actually, the more I think about that, the more it makes no sense! I guess I did it, but I can't remember why. 
Maybe just change line 111 to "return false;"? Then addWatch will return false if dir is filtered.


- Simeon


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/107529/#review22851
-----------------------------------------------------------


On Nov. 30, 2012, 7:34 a.m., Vishesh Handa wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/107529/
> -----------------------------------------------------------
> 
> (Updated Nov. 30, 2012, 7:34 a.m.)
> 
> 
> Review request for Nepomuk, Sebastian Trueg and Simeon Bird.
> 
> 
> Description
> -------
> 
>     FileWatch: Avoid calling the addWatch function recursively
>     
>     A watch needs to be added for each directory. If we try to add the
>     watches recursively, then at each level a new string is allocated which
>     consumes memory. This memory is eventually freed, but that doesn't
>     decrease the filewatch service's memory footprint.
>     
>     Additionally, this extra memory can be quite large depending on how your
>     directory is structed. For me it makes a memory difference of about
>     50mb, but bug reports indicate that it can go as high as 2gb.
>     
>     _k_addWatches() now only adds one watch and then calls itself. It
>     additionally traverses the file system tree in a depth first manner in
>     order to avoid extra memory allocations. (Breadth first costs more
>     memory)
>     
>     BUG: 310556
> 
> 
> This addresses bug 310556.
>     http://bugs.kde.org/show_bug.cgi?id=310556
> 
> 
> Diffs
> -----
> 
>   services/filewatch/kinotify.cpp e540f76 
> 
> Diff: http://git.reviewboard.kde.org/r/107529/diff/
> 
> 
> Testing
> -------
> 
> Memory footprint reduced from 65 to 17mb.
> 
> 
> Thanks,
> 
> Vishesh Handa
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/nepomuk/attachments/20121201/64b6c730/attachment.html>


More information about the Nepomuk mailing list