Skip to content

Commit 133b426

Browse files
committed
test
1 parent 3af66ba commit 133b426

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

include/geode/basic/database.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ namespace geode
5252
using serializer_function = std::function< void( PContext& ) >;
5353

5454
/*!
55-
* Classe holding a const reference of a data.
56-
* @warning Do not destroy this Data class before the const reference
57-
* obtained using its get() method is no longer in used
55+
* Class holding a const reference of data.
56+
* @warning Do not destroy this Data class if the const reference
57+
* obtained using its get() method is still in used.
5858
*/
5959
class opengeode_basic_api Data
6060
{

src/geode/basic/database.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,18 @@ namespace geode
7575

7676
void new_data_reference()
7777
{
78-
const std::lock_guard< std::mutex > locking{ lock_ };
7978
counter_++;
8079
last_++;
8180
}
8281

8382
void delete_data_reference()
8483
{
85-
const std::lock_guard< std::mutex > locking{ lock_ };
8684
OPENGEODE_ASSERT(
8785
counter_ > 0, "[Database::Storage] Cannot decrement" );
8886
counter_--;
8987
if( unused() )
9088
{
89+
const std::lock_guard< std::mutex > locking{ lock_ };
9190
clean_queue();
9291
wait_for_memory_release();
9392
}
@@ -125,7 +124,7 @@ namespace geode
125124

126125
void wait_for_memory_release()
127126
{
128-
const auto last = last_;
127+
const auto last = last_.load();
129128
queue_.emplace( async::spawn( [this, last] {
130129
std::unique_lock< std::mutex > locking{ lock_ };
131130
if( !condition_.wait_for(
@@ -138,17 +137,16 @@ namespace geode
138137
data_.reset();
139138
}
140139
}
141-
locking.unlock();
142140
} ) );
143141
}
144142

145143
private:
146144
std::unique_ptr< Identifier > data_;
147145
std::atomic< bool > terminate_{ false };
148-
index_t counter_{ 0 };
146+
std::atomic< index_t > counter_{ 0 };
149147
std::mutex lock_;
150148
std::condition_variable condition_;
151-
index_t last_{ 0 };
149+
std::atomic< index_t > last_{ 0 };
152150
std::queue< async::task< void > > queue_;
153151
};
154152

0 commit comments

Comments
 (0)