diff options
author | Glenn Glazer <coyot@lindenlab.com> | 2016-08-15 14:48:09 -0700 |
---|---|---|
committer | Glenn Glazer <coyot@lindenlab.com> | 2016-08-15 14:48:09 -0700 |
commit | 7ed9c85a1a28e494adbd2cef85b186e45dba2dc2 (patch) | |
tree | 74efe7b74f31234ac1e82c82a7c170f2471e30bd /indra/viewer_components/manager/InstallerUserMessage.py | |
parent | 2afcff5b013c778f55af77f27932e10792986a05 (diff) |
SL-323: fixes to Tkinter race condition, post --channel and --settings testing, contains debugging statements to be removed after all testing complete
Diffstat (limited to 'indra/viewer_components/manager/InstallerUserMessage.py')
-rw-r--r-- | indra/viewer_components/manager/InstallerUserMessage.py | 13 |
1 files changed, 11 insertions, 2 deletions
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(): |