Mercurial > hg-stable
changeset 8604:578f2a0049cd
inotify: do not recurse in handle_timeout(): call it explicitely, not in scan()
When in handle_timeout, scan() is called when a repertory is created/modified.
But the first line of scan calls handle_timeout.
This had the consequence of calling recursively handle_timeout:
* several calls to read_events (but only the first one retrieves events)
* every time that an event is queued for a deferred action, the next time that
scan() is called, handle_timeout is called, the event queue is treated,
even if all the events haven't been read/queued yet. This could lead to
inconsistencies
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Thu, 21 May 2009 15:55:58 +0900 |
parents | b60617a9cd3c |
children | ed2d9bdbfad2 |
files | hgext/inotify/server.py |
diffstat | 1 files changed, 3 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/inotify/server.py Sun May 24 17:07:27 2009 +0200 +++ b/hgext/inotify/server.py Thu May 21 15:55:58 2009 +0900 @@ -155,6 +155,7 @@ self.deferred = 0 self.ds_info = self.dirstate_info() + self.handle_timeout() self.scan() def event_time(self): @@ -326,7 +327,6 @@ del self.dir(self.tree, root)[fn] def scan(self, topdir=''): - self.handle_timeout() ds = self.repo.dirstate._map.copy() self.add_watch(join(self.repo.root, topdir), self.mask) for root, dirs, files in walk(self.repo, topdir): @@ -363,6 +363,7 @@ self.last_event = None self.ui.note(_('%s dirstate reload\n') % self.event_time()) self.repo.dirstate.invalidate() + self.handle_timeout() self.scan() self.ui.note(_('%s end dirstate reload\n') % self.event_time()) @@ -392,6 +393,7 @@ if '_ignore' in self.repo.dirstate.__dict__: delattr(self.repo.dirstate, '_ignore') self.ui.note(_('rescanning due to .hgignore change\n')) + self.handle_timeout() self.scan() def getstat(self, wpath):