Skip to content

Commit 971e164

Browse files
committed
Added mutex to FindDynamicObjects and PropagateDynamicObjects to avoid multiple threads using the same instances at the same time.
1 parent 826dfd0 commit 971e164

File tree

3 files changed

+7
-0
lines changed

3 files changed

+7
-0
lines changed

include/vsg/utils/FindDynamicObjects.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ namespace vsg
2424
class VSG_DECLSPEC FindDynamicObjects : public Inherit<ConstVisitor, FindDynamicObjects>
2525
{
2626
public:
27+
28+
std::mutex mutex;
2729
std::set<const Object*> dynamicObjects;
2830

2931
inline void tag(const Object* object)

include/vsg/utils/PropagateDynamicObjects.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace vsg
2626
public:
2727
PropagateDynamicObjects();
2828

29+
std::mutex mutex;
2930
std::set<const Object*> dynamicObjects;
3031
std::stack<bool> taggedStack;
3132

src/vsg/io/read.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,13 @@ ref_ptr<Object> vsg::read(const Path& filename, ref_ptr<const Options> options)
7777
if (load->object && options && options->findDynamicObjects && options->propagateDynamicObjects)
7878
{
7979
// invoke the find and propogate visitiors to collate all the dynamic objects that will need to be cloned.
80+
81+
std::scoped_lock<std::mutex> fdo_lock(options->findDynamicObjects->mutex);
82+
8083
options->findDynamicObjects->dynamicObjects.clear();
8184
load->object->accept(*(options->findDynamicObjects));
8285

86+
std::scoped_lock<std::mutex> pdo_lock(options->propagateDynamicObjects->mutex);
8387
options->propagateDynamicObjects->dynamicObjects.swap(options->findDynamicObjects->dynamicObjects);
8488
load->object->accept(*(options->propagateDynamicObjects));
8589

0 commit comments

Comments
 (0)