Mercurial > hg
view tests/testlib/ext-phase-report.py @ 34447:5385b76fd1fd
zeroconf: do not crash if socket being read is closed by another thread
In zeroconf/__init__.py, there is:
server = Zeroconf.Zeroconf(ip)
l = listener()
Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
time.sleep(1)
server.close()
`server.close()` closes the underlying socket while the `ServiceBrowser` may
still have a background thread reading the socket. There could be a race
condition where the reading thread reads the closed socket, resulting in
EBADF crash. This patch catches the exception.
This makes test-paths.t pass with chg.
Differential Revision: https://phab.mercurial-scm.org/D919
author | Jun Wu <quark@fb.com> |
---|---|
date | Mon, 02 Oct 2017 20:23:25 -0700 |
parents | 67a3204c83c1 |
children | 3b4d14beac3d |
line wrap: on
line source
# tiny extension to report phase changes during transaction from __future__ import absolute_import def reposetup(ui, repo): def reportphasemove(tr): for rev, move in sorted(tr.changes['phases'].iteritems()): if move[0] is None: ui.write(('test-debug-phase: new rev %d: x -> %d\n' % (rev, move[1]))) else: ui.write(('test-debug-phase: move rev %d: %s -> %d\n' % (rev, move[0], move[1]))) class reportphaserepo(repo.__class__): def transaction(self, *args, **kwargs): tr = super(reportphaserepo, self).transaction(*args, **kwargs) tr.addpostclose('report-phase', reportphasemove) return tr repo.__class__ = reportphaserepo