Show More
@@ -600,14 +600,25 b' class state_update(object):' | |||
|
600 | 600 | self.node = node |
|
601 | 601 | self.distance = distance |
|
602 | 602 | self.partial = partial |
|
603 | self._lock = None | |
|
603 | 604 | |
|
604 | 605 | def __enter__(self): |
|
606 | # We explicitly need to take a lock here, before we proceed to update | |
|
607 | # watchman about the update operation, so that we don't race with | |
|
608 | # some other actor. merge.update is going to take the wlock almost | |
|
609 | # immediately anyway, so this is effectively extending the lock | |
|
610 | # around a couple of short sanity checks. | |
|
611 | self._lock = self.repo.wlock() | |
|
605 | 612 | self._state('state-enter') |
|
606 | 613 | return self |
|
607 | 614 | |
|
608 | 615 | def __exit__(self, type_, value, tb): |
|
609 | status = 'ok' if type_ is None else 'failed' | |
|
610 | self._state('state-leave', status=status) | |
|
616 | try: | |
|
617 | status = 'ok' if type_ is None else 'failed' | |
|
618 | self._state('state-leave', status=status) | |
|
619 | finally: | |
|
620 | if self._lock: | |
|
621 | self._lock.release() | |
|
611 | 622 | |
|
612 | 623 | def _state(self, cmd, status='ok'): |
|
613 | 624 | if not util.safehasattr(self.repo, '_watchmanclient'): |
General Comments 0
You need to be logged in to leave comments.
Login now