Rather than explicitely acquire and release the job queue lock, we'll
use the ssynchronized decorator. This makes the code easier for further
changes.

Signed-off-by: Guido Trotter <[email protected]>
---
 lib/jqueue.py |   42 ++++++++++++++++++++----------------------
 1 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/lib/jqueue.py b/lib/jqueue.py
index fe9a156..b31f306 100644
--- a/lib/jqueue.py
+++ b/lib/jqueue.py
@@ -373,6 +373,7 @@ class _OpExecCallbacks(mcpu.OpExecCbBase):
     self._job = job
     self._op = op
 
+  @locking.ssynchronized(_big_jqueue_lock)
   def NotifyStart(self):
     """Mark the opcode as running, not lock-waiting.
 
@@ -382,22 +383,27 @@ class _OpExecCallbacks(mcpu.OpExecCbBase):
     Processor.ExecOpCode) set to OP_STATUS_WAITLOCK.
 
     """
-    self._queue.acquire()
-    try:
-      assert self._op.status in (constants.OP_STATUS_WAITLOCK,
-                                 constants.OP_STATUS_CANCELING)
+    assert self._op.status in (constants.OP_STATUS_WAITLOCK,
+                               constants.OP_STATUS_CANCELING)
 
-      # All locks are acquired by now
-      self._job.lock_status = None
+    # All locks are acquired by now
+    self._job.lock_status = None
 
-      # Cancel here if we were asked to
-      if self._op.status == constants.OP_STATUS_CANCELING:
-        raise CancelJob()
+    # Cancel here if we were asked to
+    if self._op.status == constants.OP_STATUS_CANCELING:
+      raise CancelJob()
 
-      self._op.status = constants.OP_STATUS_RUNNING
-      self._op.exec_timestamp = TimeStampNow()
-    finally:
-      self._queue.release()
+    self._op.status = constants.OP_STATUS_RUNNING
+    self._op.exec_timestamp = TimeStampNow()
+
+  @locking.ssynchronized(_big_jqueue_lock)
+  def _AppendFeedback(self, timestamp, log_type, log_msg):
+    """Internal feedback append function, with locks
+
+    """
+    self._job.log_serial += 1
+    self._op.log.append((self._job.log_serial, timestamp, log_type, log_msg))
+    self._job.change.notifyAll()
 
   def Feedback(self, *args):
     """Append a log entry.
@@ -414,15 +420,7 @@ class _OpExecCallbacks(mcpu.OpExecCbBase):
     # The time is split to make serialization easier and not lose
     # precision.
     timestamp = utils.SplitTime(time.time())
-
-    self._queue.acquire()
-    try:
-      self._job.log_serial += 1
-      self._op.log.append((self._job.log_serial, timestamp, log_type, log_msg))
-
-      self._job.change.notifyAll()
-    finally:
-      self._queue.release()
+    self._AppendFeedback(timestamp, log_type, log_msg)
 
   def ReportLocks(self, msg):
     """Write locking information to the job.
-- 
1.7.1

Reply via email to