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