diff --git a/persistent-data/block.h b/persistent-data/block.h index 1af46ba..a39da3d 100644 --- a/persistent-data/block.h +++ b/persistent-data/block.h @@ -198,6 +198,11 @@ namespace persistent_data { void flush() const; + + // This is just for unit tests, don't call in application + // code. + bool is_locked(block_address b) const; + private: void check(block_address b) const; void write_block(typename block::ptr b) const; diff --git a/persistent-data/block.tcc b/persistent-data/block.tcc index 28c87dc..1ffb0c7 100644 --- a/persistent-data/block.tcc +++ b/persistent-data/block.tcc @@ -527,4 +527,11 @@ block_manager::flush() const boost::bind(&block_manager::write_block, this, _1)); } +template +bool +block_manager::is_locked(block_address b) const +{ + return tracker_.is_locked(b); +} + //---------------------------------------------------------------- diff --git a/persistent-data/lock_tracker.cc b/persistent-data/lock_tracker.cc index eac9752..b7800c3 100644 --- a/persistent-data/lock_tracker.cc +++ b/persistent-data/lock_tracker.cc @@ -116,5 +116,12 @@ lock_tracker::check_key(uint64_t key) const throw runtime_error("invalid key"); } +bool +lock_tracker::is_locked(uint64_t key) const +{ + check_key(key); + return found(locks_.find(key)); +} + //---------------------------------------------------------------- diff --git a/persistent-data/lock_tracker.h b/persistent-data/lock_tracker.h index f54ad42..497e2cd 100644 --- a/persistent-data/lock_tracker.h +++ b/persistent-data/lock_tracker.h @@ -37,6 +37,8 @@ namespace persistent_data { void superblock_lock(uint64_t key); void unlock(uint64_t key); + bool is_locked(uint64_t key) const; + private: typedef std::map LockMap;