config prot_thread can neither set or clear processed flag
authorJack Miller <jack@codezen.org>
Thu, 23 Jul 2015 02:57:03 +0000 (21:57 -0500)
committerJack Miller <jack@codezen.org>
Thu, 23 Jul 2015 02:57:03 +0000 (21:57 -0500)
This wait would obviously deadlock since the prot_thread is what has to
actual process the PONG and set flag. The good news, however, is that
the config prot_thread is only used on NEW and DELTAGS causing config
changes and any writes stemming from those are pretty much just
informative to the daemon, whereas this mechanism is intended for user
changes being reflected before subsequent requests are made.

canto_curses/config.py

index 188e52f..eb1ff46 100644 (file)
@@ -24,7 +24,7 @@ from canto_next.remote import assign_to_dict, access_dict
 from .locks import config_lock
 from .subthread import SubThread
 
-from threading import Thread, Event
+from threading import Thread, Event, current_thread
 import traceback
 import logging
 import curses   # Colors
@@ -849,10 +849,13 @@ class CantoCursesConfig(SubThread):
         self.processed.set()
 
     def wait_write(self, cmd, args):
-        self.wait_flag = True
+        if current_thread() != self.prot_thread:
+            self.wait_flag = True
         self.write(cmd, args)
 
     def clear_wait(self):
+        if current_thread() == self.prot_thread:
+            return
         if self.wait_flag:
             self.wait_flag = False
             self.write("PING", [])