From 7ed9c85a1a28e494adbd2cef85b186e45dba2dc2 Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Mon, 15 Aug 2016 14:48:09 -0700 Subject: SL-323: fixes to Tkinter race condition, post --channel and --settings testing, contains debugging statements to be removed after all testing complete --- indra/viewer_components/manager/InstallerUserMessage.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'indra/viewer_components/manager/InstallerUserMessage.py') diff --git a/indra/viewer_components/manager/InstallerUserMessage.py b/indra/viewer_components/manager/InstallerUserMessage.py index f66af81d06..4f81aa9cd1 100644 --- a/indra/viewer_components/manager/InstallerUserMessage.py +++ b/indra/viewer_components/manager/InstallerUserMessage.py @@ -78,11 +78,17 @@ class InstallerUserMessage(tk.Tk): #defines what to do when window is closed self.protocol("WM_DELETE_WINDOW", self._delete_window) + + #callback id + self.id = -1 def _delete_window(self): #capture and discard all destroy events before the choice is set if not ((self.choice == None) or (self.choice == "")): try: + #initialized value. If we have an outstanding callback, kill it before killing ourselves + if self.id != -1: + self.after_cancel(self.id) self.destroy() except: #tk may try to destroy the same object twice @@ -217,8 +223,11 @@ class InstallerUserMessage(tk.Tk): def check_scheduler(self): if self.value < self.progress["maximum"]: - self.check_queue() - self.after(100, self.check_scheduler) + self.check_queue() + self.id = self.after(100, self.check_scheduler) + else: + #prevent a race condition between polling and the widget destruction + self.after_cancel(self.id) def check_queue(self): while self.queue.qsize(): -- cgit v1.2.3