diff options
author | Chris Laplante <chris.laplante@agilent.com> | 2020-01-16 11:28:05 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-01-19 13:30:58 +0000 |
commit | feb43e7c30f5bfab75d718896c45df621810d06f (patch) | |
tree | 7a1f954a7c8803022fca28e43011e0711ab27e32 /lib | |
parent | 425e21c14955dd38868c6e97637df3bbe0f89fac (diff) | |
download | bitbake-feb43e7c30f5bfab75d718896c45df621810d06f.tar.gz |
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 <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bb/persist_data.py | 3 |
1 files changed, 3 insertions, 0 deletions
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: |