bruns added a comment.

  In D18698#406755 <https://phabricator.kde.org/D18698#406755>, @poboiko wrote:
  
  > Something like that? I've decided not to emit `created` signal from inside 
the function, just to have a bit less branching in the code (and documented 
this behavior, since it might be a bit confusing)
  >
  > Actually, I think this race condition is now handled properly, i.e. I can't 
think even of the case when we got `created` signal twice for the same file.
  
  
  Yes, looks almost fine now.
  
  It is still possible to get two "created" signals for a new file, but as 
said, two signals are the race we handle fine, only zero signals would be an 
issue:
  
    = a =
    it->next()   -- adds "foobar" to it.m_paths
    addWatch("foobar")
    = b =
    it.next(), it.next(), ... it.next()   -- siblings of "foobar"
    = c =
    it.next() -- take "foobar" from it.m_paths, instantiate 
QDirIterator("foobar")
    it.next(), ... it.next()  -- contents of "foobar"
    it.next() -- destruct "foobar" iterator
    = d =
  
  Any file created after =b= and before =c=  will emit "created" twice, once 
from the already created watcher, and once during the traversal
  Files created before =a= will be missed by the watch (thus we need the 
iteration), files created after =d= will only be picked up by the watcher.

INLINE COMMENTS

> kinotify.cpp:390
> +                // is installed. Ensure created events for all children are 
> issued at least once
> +                handleDirCreated(QFile::decodeName(path));
>              }

`QFile::decodeName(path)` twice ...

> kinotify.cpp:441
> +                if (event->mask & IN_ISDIR) {
> +                    handleDirCreated(QFile::decodeName(path));
> +                }

dito ...

REPOSITORY
  R293 Baloo

REVISION DETAIL
  https://phabricator.kde.org/D18698

To: poboiko, #baloo, #frameworks, ngraham, bruns
Cc: bruns, ngraham, kde-frameworks-devel, #baloo, ashaposhnikov, michaelh, 
astippich, spoorun, abrahams

Reply via email to