# HG changeset patch # User Edouard Tisserant # Date 1630998520 -7200 # Node ID 358ccd42e052b00e41bb3ecafb26641500605245 # Parent eeec6e0ea269896e764953d75eb0720ae8e7b677 Runtime: avoids using "pipe to self" bailout unblocking trick on windows, since select() only takes sockets. diff -r eeec6e0ea269 -r 358ccd42e052 runtime/PyroServer.py --- a/runtime/PyroServer.py Sun Sep 05 15:24:14 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")