[bitbake-devel] [1.44 3/7] persist_data.py: Immediately get exclusive lock in __setitem__
Armin Kuster
akuster808 at gmail.com
Sun Feb 9 16:03:11 UTC 2020
From: Chris Laplante <chris.laplante at agilent.com>
To avoid races, SQLTable::__setitem__ needs an exclusive lock for the
entire transaction, not just the INSERT/UPDATE part.
Signed-off-by: Chris Laplante <chris.laplante at agilent.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
(cherry picked from commit feb43e7c30f5bfab75d718896c45df621810d06f)
Signed-off-by: Armin Kuster <akuster808 at gmail.com>
---
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 de8f87a8..7357ab2d 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:
--
2.17.1
More information about the bitbake-devel
mailing list