Skip to content

Commit f836cf5

Browse files
committed
Moved mutex into public scope to enable locking of groups of share(..)
1 parent 93dfd25 commit f836cf5

2 files changed

Lines changed: 12 additions & 11 deletions

File tree

include/vsg/utils/SharedObjects.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ namespace vsg
7272
/// write out stats of objects held, types of objects and their reference counts
7373
void report(vsg::LogOutput& output);
7474

75+
mutable std::recursive_mutex mutex;
76+
7577
protected:
7678
~SharedObjects() override;
7779

78-
mutable std::recursive_mutex _mutex;
7980
std::map<std::type_index, ref_ptr<Object>> _defaults;
8081
std::map<std::type_index, std::set<ref_ptr<Object>, DereferenceLess>> _sharedObjects;
8182
};
@@ -127,7 +128,7 @@ namespace vsg
127128
template<class T>
128129
ref_ptr<T> SharedObjects::shared_default()
129130
{
130-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
131+
std::scoped_lock<std::recursive_mutex> lock(mutex);
131132

132133
auto id = std::type_index(typeid(T));
133134
auto& def = _defaults[id];
@@ -155,7 +156,7 @@ namespace vsg
155156
template<class T>
156157
void SharedObjects::share(ref_ptr<T>& object)
157158
{
158-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
159+
std::scoped_lock<std::recursive_mutex> lock(mutex);
159160

160161
if (suitableForSharing && !suitableForSharing->suitable(object.get())) return;
161162

@@ -175,7 +176,7 @@ namespace vsg
175176
void SharedObjects::share(ref_ptr<T>& object, Func init)
176177
{
177178
{
178-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
179+
std::scoped_lock<std::recursive_mutex> lock(mutex);
179180

180181
auto id = std::type_index(typeid(T));
181182
auto& shared_objects = _sharedObjects[id];
@@ -189,7 +190,7 @@ namespace vsg
189190
init(object);
190191

191192
{
192-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
193+
std::scoped_lock<std::recursive_mutex> lock(mutex);
193194
auto id = std::type_index(typeid(T));
194195
auto& shared_objects = _sharedObjects[id];
195196
if (suitableForSharing && suitableForSharing->suitable(object.get()))

src/vsg/utils/SharedObjects.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ bool SharedObjects::suitable(const Path& filename) const
2121

2222
bool SharedObjects::contains(const Path& filename, ref_ptr<const Options> options) const
2323
{
24-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
24+
std::scoped_lock<std::recursive_mutex> lock(mutex);
2525

2626
auto loadedObject_id = std::type_index(typeid(LoadedObject));
2727
auto itr = _sharedObjects.find(loadedObject_id);
@@ -34,7 +34,7 @@ bool SharedObjects::contains(const Path& filename, ref_ptr<const Options> option
3434

3535
void SharedObjects::add(ref_ptr<Object> object, const Path& filename, ref_ptr<const Options> options)
3636
{
37-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
37+
std::scoped_lock<std::recursive_mutex> lock(mutex);
3838

3939
auto loadedObject_id = std::type_index(typeid(LoadedObject));
4040
auto& loadedObjects = _sharedObjects[loadedObject_id];
@@ -45,7 +45,7 @@ void SharedObjects::add(ref_ptr<Object> object, const Path& filename, ref_ptr<co
4545

4646
bool SharedObjects::remove(const Path& filename, ref_ptr<const Options> options)
4747
{
48-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
48+
std::scoped_lock<std::recursive_mutex> lock(mutex);
4949

5050
auto loadedObject_id = std::type_index(typeid(LoadedObject));
5151
auto itr = _sharedObjects.find(loadedObject_id);
@@ -67,14 +67,14 @@ bool SharedObjects::remove(const Path& filename, ref_ptr<const Options> options)
6767

6868
void SharedObjects::clear()
6969
{
70-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
70+
std::scoped_lock<std::recursive_mutex> lock(mutex);
7171
_defaults.clear();
7272
_sharedObjects.clear();
7373
}
7474

7575
void SharedObjects::prune()
7676
{
77-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
77+
std::scoped_lock<std::recursive_mutex> lock(mutex);
7878

7979
auto loadedObject_id = std::type_index(typeid(LoadedObject));
8080

@@ -156,7 +156,7 @@ void SharedObjects::prune()
156156

157157
void SharedObjects::report(vsg::LogOutput& output)
158158
{
159-
std::scoped_lock<std::recursive_mutex> lock(_mutex);
159+
std::scoped_lock<std::recursive_mutex> lock(mutex);
160160
output("SharedObjects::report(..) ", this, " {");
161161
output.in();
162162
output("SharedObjects::_defaults ", _defaults.size(), " {");

0 commit comments

Comments
 (0)