# HG changeset patch # User Edouard Tisserant # Date 1550135203 -3600 # Node ID 27e4fd37fea64845d4f0cca5b8f13c65edd18d94 # Parent 889c43872f4cd51d70ce504ee81033450564f1fe Fix previous commit : Using wx.CallAfter shouldn't have been necessary, and was a symptom of failing evaluator's deadlock detection. diff -r 889c43872f4c -r 27e4fd37fea6 Beremiz_service.py --- a/Beremiz_service.py Wed Feb 13 13:08:26 2019 +0100 +++ b/Beremiz_service.py Thu Feb 14 10:06:43 2019 +0100 @@ -435,6 +435,7 @@ # UI threads can be either the one from WX main loop or # worker thread from twisted "threadselect" reactor current_id = currentThread().ident + if ui_thread is not None \ and ui_thread.ident != current_id \ and (not havetwisted or ( @@ -570,6 +571,7 @@ # This order ui loop to unblock main thread when ready. if havetwisted: def signal_uithread_started(): + global twisted_reactor_thread_id twisted_reactor_thread_id = currentThread().ident ui_thread_started.release() reactor.callLater(0, signal_uithread_started) diff -r 889c43872f4c -r 27e4fd37fea6 wxglade_hmi/wxglade_hmi.py --- a/wxglade_hmi/wxglade_hmi.py Wed Feb 13 13:08:26 2019 +0100 +++ b/wxglade_hmi/wxglade_hmi.py Thu Feb 14 10:06:43 2019 +0100 @@ -132,6 +132,9 @@ else: define_hmi = "" + global_hmi = ("global %s\n" % ",".join( + [x["name"] for x in main_frames]) if len(main_frames) > 0 else "") + declare_hmi = \ "\n".join(["%(name)s = None\n" % x for x in main_frames]) + \ "\n".join(["\n".join(["%(class)s.%(h)s = %(h)s" % @@ -142,29 +145,26 @@ wx.MessageBox(_("Please stop PLC to close")) def InitHMI(): -"""+"\n".join(["""\ + """+ global_hmi + "\n" + "\n".join(["""\ %(name)s = %(class)s(None) %(name)s.Bind(wx.EVT_CLOSE, OnCloseFrame) %(name)s.Show() """ % x for x in main_frames]) + """\ def CleanupHMI(): -""" + "\n".join(["""\ + """+ global_hmi + "\n" + "\n".join(["""\ if %(name)s is not None: %(name)s.Destroy() """ % x for x in main_frames]) - global_hmi = ("global %s\n" % ",".join( - [x["name"] for x in main_frames]) if len(main_frames) > 0 else "") - self.PreSectionsTexts = { "globals": define_hmi, "start": global_hmi, - "stop": global_hmi + "wx.CallAfter(CleanupHMI)\n" + "stop": "CleanupHMI()\n" } self.PostSectionsTexts = { "globals": declare_hmi, - "start": "wx.CallAfter(InitHMI)\n", + "start": "InitHMI()\n", } if len(main_frames) == 0 and \