diff --git a/docs/changelog.rst b/docs/changelog.rst index 7f9b23a5..ea52ef29 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -176,7 +176,8 @@ Thanks! Mitogen would not be possible without the support of users. A huge thanks for bug reports, testing, features and fixes in this release contributed by -`Fabian Arrotin `_, and +`Fabian Arrotin `_, +`Percy Grunwald `_, `Petr Enkov `_, and `@elbunda `_. diff --git a/mitogen/core.py b/mitogen/core.py index 607c4bfb..578337f7 100644 --- a/mitogen/core.py +++ b/mitogen/core.py @@ -140,7 +140,6 @@ try: except NameError: BaseException = Exception -IS_WSL = 'Microsoft' in os.uname()[2] PY24 = sys.version_info < (2, 5) PY3 = sys.version_info > (3,) if PY3: @@ -164,6 +163,14 @@ try: except NameError: next = lambda it: it.next() +# #550: prehistoric WSL did not advertise itself in uname output. +try: + fp = open('/proc/sys/kernel/osrelease') + IS_WSL = 'Microsoft' in fp.read() + fp.close() +except IOError: + IS_WSL = False + #: Default size for calls to :meth:`Side.read` or :meth:`Side.write`, and the #: size of buffers configured by :func:`mitogen.parent.create_socketpair`. This diff --git a/mitogen/parent.py b/mitogen/parent.py index f25bd6c2..3d02bc43 100644 --- a/mitogen/parent.py +++ b/mitogen/parent.py @@ -371,11 +371,12 @@ def create_child(args, merge_stdio=False, stderr_pipe=False, preexec_fn=None): def _acquire_controlling_tty(): os.setsid() - if sys.platform == 'linux2': + if sys.platform in ('linux', 'linux2'): # On Linux, the controlling tty becomes the first tty opened by a # process lacking any prior tty. os.close(os.open(os.ttyname(2), os.O_RDWR)) - if hasattr(termios, 'TIOCSCTTY'): + if hasattr(termios, 'TIOCSCTTY') and not mitogen.core.IS_WSL: + # #550: prehistoric WSL does not like TIOCSCTTY. # On BSD an explicit ioctl is required. For some inexplicable reason, # Python 2.6 on Travis also requires it. fcntl.ioctl(2, termios.TIOCSCTTY) diff --git a/mitogen/service.py b/mitogen/service.py index dc200b95..302e81ab 100644 --- a/mitogen/service.py +++ b/mitogen/service.py @@ -451,7 +451,7 @@ class Pool(object): """ activator_class = Activator - def __init__(self, router, services, size=1, overwrite=False): + def __init__(self, router, services=(), size=1, overwrite=False): self.router = router self._activator = self.activator_class() self._ipc_latch = mitogen.core.Latch()