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