summaryrefslogtreecommitdiff
path: root/LICENSE-MIT
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2019-12-21 16:29:53 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2019-12-23 18:36:56 -0800
commitbb517fdb8433ddb18b286c185403c7e1bc7eaae5 (patch)
treebd74c0dd1541d02382e0113a483cde1961d86405 /LICENSE-MIT
parenteb8fc4f3be7a1b5dd90313f0a8381bdaca346632 (diff)
downloadspack-bb517fdb8433ddb18b286c185403c7e1bc7eaae5.tar.gz
spack-bb517fdb8433ddb18b286c185403c7e1bc7eaae5.tar.bz2
spack-bb517fdb8433ddb18b286c185403c7e1bc7eaae5.tar.xz
spack-bb517fdb8433ddb18b286c185403c7e1bc7eaae5.zip
lock transactions: ensure that nested write transactions write
If a write transaction was nested inside a read transaction, it would not write properly on release, e.g., in a sequence like this, inside our `LockTransaction` class: ``` 1 with spack.store.db.read_transaction(): 2 with spack.store.db.write_transaction(): 3 ... 4 with spack.store.db.read_transaction(): ... ``` The WriteTransaction on line 2 had no way of knowing that its `__exit__()` call was the last *write* in the nesting, and it would skip calling its write function. The `__exit__()` call of the `ReadTransaction` on line 1 wouldn't know how to write, and the file would never be written. The DB would be correct in memory, but the `ReadTransaction` on line 4 would re-read the whole DB assuming that other processes may have modified it. Since the DB was never written, we got stale data. - [x] Make `Lock.release_write()` return `True` whenever we release the *last write* in a nest.
Diffstat (limited to 'LICENSE-MIT')
0 files changed, 0 insertions, 0 deletions