From feb43e7c30f5bfab75d718896c45df621810d06f Mon Sep 17 00:00:00 2001 From: Chris Laplante Date: Thu, 16 Jan 2020 11:28:05 -0500 Subject: persist_data.py: Immediately get exclusive lock in __setitem__ To avoid races, SQLTable::__setitem__ needs an exclusive lock for the entire transaction, not just the INSERT/UPDATE part. Signed-off-by: Chris Laplante Signed-off-by: Richard Purdie --- lib/bb/persist_data.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/bb/persist_data.py b/lib/bb/persist_data.py index de8f87a8b..7357ab2d4 100644 --- a/lib/bb/persist_data.py +++ b/lib/bb/persist_data.py @@ -179,6 +179,9 @@ class SQLTable(collections.MutableMapping): elif not isinstance(value, str): raise TypeError('Only string values are supported') + # Ensure the entire transaction (including SELECT) executes under write lock + cursor.execute("BEGIN EXCLUSIVE") + cursor.execute("SELECT * from %s where key=?;" % self.table, [key]) row = cursor.fetchone() if row is not None: -- cgit 1.2.3-korg