summaryrefslogtreecommitdiff
path: root/LICENSE-APACHE
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 23:18:44 -0800
commitb3a5f2e3c3ce4e3e9836301504f5b5987117248e (patch)
tree9beda00ced952bcb53eb2e1108e078a0f3937383 /LICENSE-APACHE
parent98577e3af5cf571d5408fcb1da32de3586238ead (diff)
downloadspack-b3a5f2e3c3ce4e3e9836301504f5b5987117248e.tar.gz
spack-b3a5f2e3c3ce4e3e9836301504f5b5987117248e.tar.bz2
spack-b3a5f2e3c3ce4e3e9836301504f5b5987117248e.tar.xz
spack-b3a5f2e3c3ce4e3e9836301504f5b5987117248e.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-APACHE')
0 files changed, 0 insertions, 0 deletions