diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-08-11 12:29:46 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-08-11 12:30:24 +0200 |
commit | 41709673f0165f16496ecf37162ed7dac06b5295 (patch) | |
tree | c213da683873bbe88927a3de58eb93f3f231a693 /persistence | |
parent | 2fe073e8e1875bc891c38099c880d156bd228e9d (diff) |
Use std::atomic all over and completely get rid of homegrown atomics.
Diffstat (limited to 'persistence')
-rw-r--r-- | persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp | 17 | ||||
-rw-r--r-- | persistence/src/vespa/persistence/dummyimpl/dummypersistence.h | 15 |
2 files changed, 12 insertions, 20 deletions
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp index 848ac783725..0aec6877367 100644 --- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp +++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp @@ -9,18 +9,15 @@ #include <vespa/document/fieldset/fieldsetrepo.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/atomic.h> #include <vespa/vespalib/stllike/hash_map.hpp> -#include <vespa/log/log.h> using std::binary_search; using std::lower_bound; +#include <vespa/log/log.h> LOG_SETUP(".dummypersistence"); -namespace storage { -namespace spi { -namespace dummy { +namespace storage::spi::dummy { BucketContent::BucketContent() : _entries(), @@ -933,7 +930,8 @@ DummyPersistence::acquireBucketWithLock(const Bucket& b) const // Atomic CAS might be a bit overkill, but since we "release" the bucket // outside of the mutex, we want to ensure the write is visible across all // threads. - bool bucketNotInUse(vespalib::Atomic::cmpSwap(&it->second->_inUse, 1, 0)); + bool my_true(true); + bool bucketNotInUse(it->second->_inUse.compare_exchange_strong(my_true, false)); if (!bucketNotInUse) { LOG(error, "Attempted to acquire %s, but it was already marked as being in use!", b.toString().c_str()); @@ -946,13 +944,12 @@ DummyPersistence::acquireBucketWithLock(const Bucket& b) const void DummyPersistence::releaseBucketNoLock(const BucketContent& bc) const { - bool bucketInUse(vespalib::Atomic::cmpSwap(&bc._inUse, 0, 1)); + bool my_false(false); + bool bucketInUse(bc._inUse.compare_exchange_strong(my_false, true)); assert(bucketInUse); (void) bucketInUse; } -} // dummy -} // spi -} // storage +} VESPALIB_HASH_MAP_INSTANTIATE_H(storage::spi::Bucket, std::shared_ptr<storage::spi::dummy::BucketContent>, document::BucketId::hash) diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h index bd1059d5617..0e2821036ea 100644 --- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h +++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h @@ -14,17 +14,14 @@ #include <vespa/document/fieldset/fieldsets.h> #include <vespa/vespalib/util/sync.h> #include <vespa/vespalib/stllike/hash_map.h> +#include <atomic> namespace document { class FieldSet; - namespace select { - class Node; - } + namespace select { class Node; } } -namespace storage { -namespace spi { -namespace dummy { +namespace storage::spi::dummy { struct BucketEntry { @@ -49,7 +46,7 @@ struct BucketContent { std::vector<BucketEntry> _entries; GidMapType _gidMap; mutable BucketInfo _info; - mutable uint32_t _inUse; + mutable std::atomic<bool> _inUse; mutable bool _outdatedInfo; bool _active; @@ -234,6 +231,4 @@ private: mutable BucketIdListResult::List _modifiedBuckets; }; -} // dummy -} // spi -} // storage +} |