diff --git a/lib/jqueue.py b/lib/jqueue.py
index 2838272807f7334ea51e1189636d8f4d58d624d6..77512a98455ff7df2ceb8b923c77e5d34d1eae34 100644
--- a/lib/jqueue.py
+++ b/lib/jqueue.py
@@ -446,6 +446,15 @@ class _OpExecCallbacks(mcpu.OpExecCbBase):
     finally:
       self._queue.release()
 
+  @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._queue.UpdateJobUnlocked(self._job, replicate=False)
+
   def Feedback(self, *args):
     """Append a log entry.
 
@@ -461,14 +470,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._queue.UpdateJobUnlocked(self._job, replicate=False)
-    finally:
-      self._queue.release()
+    self._AppendFeedback(timestamp, log_type, log_msg)
 
   def ReportLocks(self, msg):
     """Write locking information to the job.