extras-buildsys/server Repo.py,1.22,1.23

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Fri Mar 24 01:34:55 UTC 2006


Author: dcbw

Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8030/server

Modified Files:
	Repo.py 
Log Message:
2006-03-23  Dan Williams  <dcbw at redhat.com>

    * server/Repo.py
        - Consolidate depsolve_again and depsolve_immediate locks into
            one lock to avoid deadlocks




Index: Repo.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/Repo.py,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- Repo.py	24 Feb 2006 17:27:02 -0000	1.22
+++ Repo.py	24 Mar 2006 01:34:48 -0000	1.23
@@ -71,9 +71,8 @@
         # The queues are dicts mapping buildjob->boolean, where a boolean
         # value of True means the job's depsolve has started, and false
         # means it hasn't.
-        self._depsolve_immediate_lock = threading.Lock()
+        self._depsolve_lock = threading.Lock()
         self._depsolve_immediate_queue = {}
-        self._depsolve_again_lock = threading.Lock()
         self._depsolve_again_queue = {}
 
         # Repo unlock queue
@@ -107,14 +106,12 @@
 
     def request_depsolve(self, buildjob, first_try=False):
         """ Registers a buildjob be notified to start depsolving when the repo is ready """
+        self._depsolve_lock.acquire()
         if first_try:
-            self._depsolve_immediate_lock.acquire()
             self._depsolve_immediate_queue[buildjob] = False
-            self._depsolve_immediate_lock.release()
         else:
-            self._depsolve_again_lock.acquire()
             self._depsolve_again_queue[buildjob] = False
-            self._depsolve_again_lock.release()
+        self._depsolve_lock.release()
 
     def request_unlock(self, archjob):
         self._repo_unlock_lock.acquire()
@@ -154,10 +151,10 @@
         """ Start waiting depsolves, but only a certain number to avoid
             nailing the build server too hard.
         """
-        self._depsolve_immediate_lock.acquire()
-        self._depsolve_again_lock.acquire()
+        self._depsolve_lock.acquire()
 
         max_immediate_depsolves = self.MAX_DEPSOLVE_JOBS
+        max_again_depsolves = 0
         if repo_changed:
             max_again_depsolves = self.MAX_DEPSOLVE_JOBS / 2
             max_immediate_depsolves = self.MAX_DEPSOLVE_JOBS / 2
@@ -168,26 +165,22 @@
         if repo_changed:
             self._start_depsolves_for_queue(self._depsolve_again_queue, max_again_depsolves, first_try=False)
 
-        self._depsolve_again_lock.release()
-        self._depsolve_immediate_lock.release()
+        self._depsolve_lock.release()
 
     def notify_depsolve_done(self, buildjob):
         """ Notifies the repo that a job is done depsolving """
-        self._depsolve_immediate_lock.acquire()
-        self._depsolve_again_lock.acquire()
+        self._depsolve_lock.acquire()
         if buildjob in self._depsolve_immediate_queue:
             del self._depsolve_immediate_queue[buildjob]
         elif buildjob in self._depsolve_again_queue:
             del self._depsolve_again_queue[buildjob]
-        self._depsolve_again_lock.release()
-        self._depsolve_immediate_lock.release()
+        self._depsolve_lock.release()
 
     def _any_depsolving_jobs(self):
         """ Determines if any jobs are currently depsolving """
         any_depsolving = False
 
-        self._depsolve_immediate_lock.acquire()
-        self._depsolve_again_lock.acquire()
+        self._depsolve_lock.acquire()
         for job in self._depsolve_immediate_queue.keys():
             if self._depsolve_immediate_queue[job]:
                 any_depsolving = True
@@ -197,8 +190,7 @@
                 if self._depsolve_again_queue[job]:
                     any_depsolving = True
                     break
-        self._depsolve_again_lock.release()
-        self._depsolve_immediate_lock.release()
+        self._depsolve_lock.release()
 
         return any_depsolving
 
@@ -349,6 +341,9 @@
 
             time.sleep(5)
 
+        # done
+        print "Repo (%s): shut down." % self._target_cfg.target_string()
+
     def stop(self):
         self._stop = True
 




More information about the fedora-extras-commits mailing list