Skip to content
Snippets Groups Projects
Commit 23fc62e0 authored by Nicolas Dumazet's avatar Nicolas Dumazet
Browse files

zeroconf: notify the Zeroconf threads when hg exits

Zeroconf launches two threads in the background, and they wait on
Condition objects to exit. We need to call Zeroconf.close() to
release those conditions so that threads can gracefully exit.

This means that an interrupt on the hg process will now gracefully
propagate to the Zeroconf children, fixing that bug which did not
allow us to kill an `hg serve` process.
parent 2b122669
No related branches found
No related tags found
No related merge requests found
......@@ -27,7 +27,7 @@
import socket, time, os
import Zeroconf
from mercurial import ui, hg, encoding, util
from mercurial import ui, hg, encoding, util, dispatch
from mercurial import extensions
from mercurial.hgweb import hgweb_mod
from mercurial.hgweb import hgwebdir_mod
......@@ -166,6 +166,18 @@
return name.encode(encoding.encoding)
return orig(source)
def cleanupafterdispatch(orig, ui, options, cmd, cmdfunc):
try:
return orig(ui, options, cmd, cmdfunc)
finally:
# we need to call close() on the server to notify() the various
# threading Conditions and allow the background threads to exit
global server
if server:
server.close()
extensions.wrapfunction(dispatch, '_runcommand', cleanupafterdispatch)
extensions.wrapfunction(ui.ui, 'config', config)
extensions.wrapfunction(ui.ui, 'configitems', configitems)
extensions.wrapfunction(hg, 'defaultdest', defaultdest)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment