[svn] commit: r3488 - /trunk/src/bin/zonemgr/zonemgr.py.in

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Nov 8 11:28:51 UTC 2010


Author: vorner
Date: Mon Nov  8 11:28:51 2010
New Revision: 3488

Log:
Fix possible race condition

Reviewed as #400

Modified:
    trunk/src/bin/zonemgr/zonemgr.py.in

Modified: trunk/src/bin/zonemgr/zonemgr.py.in
==============================================================================
--- trunk/src/bin/zonemgr/zonemgr.py.in (original)
+++ trunk/src/bin/zonemgr/zonemgr.py.in Mon Nov  8 11:28:51 2010
@@ -324,8 +324,14 @@
         return False
 
     def _run_timer(self, start_event):
-        start_event.set()
         while self._running:
+            # Notify run_timer that we already started and are inside the loop.
+            # It is set only once, but when it was outside the loop, there was
+            # a race condition and _running was could be set false before we
+            # could enter it
+            if start_event:
+                start_event.set()
+                start_event = None
             # If zonemgr has no zone, set timer timeout to self._lowerbound_retry.
             if self._zone_mgr_is_empty():
                 timeout = self._lowerbound_retry
@@ -354,7 +360,8 @@
             for fd in rlist:
                 if fd == self._read_sock: # awaken by shutdown socket
                     # self._running will be False by now, if it is not a false
-                    # alarm
+                    # alarm (linux kernel is said to trigger spurious wakeup
+                    # on a filehandle that is not really readable).
                     continue
                 if fd == self._check_sock: # awaken by check socket
                     self._check_sock.recv(32)




More information about the bind10-changes mailing list