summaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-08-11 12:29:46 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-08-11 12:30:24 +0200
commit41709673f0165f16496ecf37162ed7dac06b5295 (patch)
treec213da683873bbe88927a3de58eb93f3f231a693 /persistence
parent2fe073e8e1875bc891c38099c880d156bd228e9d (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.cpp17
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.h15
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
+}