# HG changeset patch # User Edouard Tisserant # Date 1630998520 -7200 # Node ID 574782d2be1d41caba7cf1d27b6733c98a22e678 # Parent c6de1a6cb6554afbec63e9910cd1f7f02e8bf7f7 Runtime: avoids using "pipe to self" bailout unblocking trick on windows, since select() only takes sockets. diff -r c6de1a6cb655 -r 574782d2be1d runtime/PyroServer.py --- a/runtime/PyroServer.py Tue Oct 19 15:15:03 2021 +0200 +++ b/runtime/PyroServer.py Tue Sep 07 09:08:40 2021 +0200 @@ -62,8 +62,15 @@ self.daemon.connect(pyro_obj, "PLCObject") when_ready() - self.piper, self.pipew = os.pipe() - self.daemon.requestLoop(others=[self.piper], callback=lambda x: None) + + # "pipe to self" trick to to accelerate runtime shutdown + # instead of waiting for arbitrary pyro timeout. + others = [] + if not sys.platform.startswith('win'): + self.piper, self.pipew = os.pipe() + others.append = self.piper + + self.daemon.requestLoop(others=others, callback=lambda x: None) self.piper, self.pipew = None, None if hasattr(self, 'sock'): self.daemon.sock.close() @@ -76,8 +83,9 @@ self.continueloop = False self.daemon.shutdown(True) self.daemon.closedown() - if self.pipew is not None: - os.write(self.pipew, "goodbye") + if not sys.platform.startswith('win'): + if self.pipew is not None: + os.write(self.pipew, "goodbye") def Publish(self): self.servicepublisher = ServicePublisher("PYRO")