[Bf-blender-cvs] [e858f2e9fff] functions: thread safe block creation and deletion
Jacques Lucke
noreply at git.blender.org
Thu Jun 27 15:49:59 CEST 2019
Commit: e858f2e9fff19d6325533e08ebf1068cbcea48ec
Author: Jacques Lucke
Date: Thu Jun 27 13:27:52 2019 +0200
Branches: functions
https://developer.blender.org/rBe858f2e9fff19d6325533e08ebf1068cbcea48ec
thread safe block creation and deletion
===================================================================
M source/blender/simulations/bparticles/particles_container.cpp
M source/blender/simulations/bparticles/particles_container.hpp
===================================================================
diff --git a/source/blender/simulations/bparticles/particles_container.cpp b/source/blender/simulations/bparticles/particles_container.cpp
index ab4d586f4e4..990709c4992 100644
--- a/source/blender/simulations/bparticles/particles_container.cpp
+++ b/source/blender/simulations/bparticles/particles_container.cpp
@@ -23,6 +23,8 @@ ParticlesContainer::~ParticlesContainer()
ParticlesBlock &ParticlesContainer::new_block()
{
+ std::lock_guard<std::mutex> lock(m_blocks_mutex);
+
AttributeArraysCore attributes_core = AttributeArraysCore::NewWithSeparateAllocations(
m_attributes_info, m_block_size);
ParticlesBlock *block = new ParticlesBlock(*this, attributes_core);
@@ -32,6 +34,8 @@ ParticlesBlock &ParticlesContainer::new_block()
void ParticlesContainer::release_block(ParticlesBlock &block)
{
+ std::lock_guard<std::mutex> lock(m_blocks_mutex);
+
BLI_assert(block.active_amount() == 0);
BLI_assert(m_blocks.contains(&block));
BLI_assert(&block.container() == this);
diff --git a/source/blender/simulations/bparticles/particles_container.hpp b/source/blender/simulations/bparticles/particles_container.hpp
index 86cfea31727..817ed18741c 100644
--- a/source/blender/simulations/bparticles/particles_container.hpp
+++ b/source/blender/simulations/bparticles/particles_container.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <mutex>
+
#include "BLI_array_ref.hpp"
#include "BLI_small_vector.hpp"
#include "BLI_small_set_vector.hpp"
@@ -27,6 +29,7 @@ class ParticlesContainer {
AttributesInfo m_attributes_info;
SmallSet<ParticlesBlock *> m_blocks;
uint m_block_size;
+ std::mutex m_blocks_mutex;
public:
ParticlesContainer(AttributesInfo attributes, uint block_size);
More information about the Bf-blender-cvs
mailing list