[Bf-blender-cvs] [2016c92] openvdb: Fix segault when closing Blender.
Kévin Dietrich
noreply at git.blender.org
Fri Jun 5 14:07:50 CEST 2015
Commit: 2016c92ef18383cf0b055d0b74e7b034772ba155
Author: Kévin Dietrich
Date: Sat May 23 05:58:11 2015 +0200
Branches: openvdb
https://developer.blender.org/rB2016c92ef18383cf0b055d0b74e7b034772ba155
Fix segault when closing Blender.
The cache was freed after the smoke domain...
===================================================================
M intern/openvdb/intern/openvdb_writer.cpp
M intern/openvdb/intern/openvdb_writer.h
M source/blender/blenkernel/intern/smoke.c
===================================================================
diff --git a/intern/openvdb/intern/openvdb_writer.cpp b/intern/openvdb/intern/openvdb_writer.cpp
index 37cd28e..9c2ad40 100644
--- a/intern/openvdb/intern/openvdb_writer.cpp
+++ b/intern/openvdb/intern/openvdb_writer.cpp
@@ -27,8 +27,9 @@
OpenVDBWriter::OpenVDBWriter()
: m_grids(new openvdb::GridPtrVec())
+ , m_meta_map(new openvdb::MetaMap())
{
- m_meta_map.insertMeta("creator", openvdb::StringMetadata("Blender/OpenVDBWriter"));
+ m_meta_map->insertMeta("creator", openvdb::StringMetadata("Blender/OpenVDBWriter"));
}
OpenVDBWriter::~OpenVDBWriter()
@@ -46,22 +47,22 @@ void OpenVDBWriter::insert(const openvdb::GridBase &grid)
void OpenVDBWriter::insertFloatMeta(const std::string &name, const float value)
{
- m_meta_map.insertMeta(name, openvdb::FloatMetadata(value));
+ m_meta_map->insertMeta(name, openvdb::FloatMetadata(value));
}
void OpenVDBWriter::insertIntMeta(const std::string &name, const int value)
{
- m_meta_map.insertMeta(name, openvdb::Int32Metadata(value));
+ m_meta_map->insertMeta(name, openvdb::Int32Metadata(value));
}
void OpenVDBWriter::insertVec3sMeta(const std::string &name, const openvdb::Vec3s value)
{
- m_meta_map.insertMeta(name, openvdb::Vec3SMetadata(value));
+ m_meta_map->insertMeta(name, openvdb::Vec3SMetadata(value));
}
void OpenVDBWriter::insertVec3IMeta(const std::string &name, const openvdb::Vec3I value)
{
- m_meta_map.insertMeta(name, openvdb::Vec3IMetadata(value));
+ m_meta_map->insertMeta(name, openvdb::Vec3IMetadata(value));
}
void OpenVDBWriter::insertMat4sMeta(const std::string &name, const float value[4][4])
@@ -72,7 +73,7 @@ void OpenVDBWriter::insertMat4sMeta(const std::string &name, const float value[4
value[2][0], value[2][1], value[2][2], value[2][3],
value[3][0], value[3][1], value[3][2], value[3][3]);
- m_meta_map.insertMeta(name, openvdb::Mat4SMetadata(mat));
+ m_meta_map->insertMeta(name, openvdb::Mat4SMetadata(mat));
}
void OpenVDBWriter::setFileCompression(const int flags)
@@ -84,7 +85,7 @@ void OpenVDBWriter::write(const std::string &filename) const
{
openvdb::io::File file(filename);
file.setCompression(m_flags);
- file.write(*m_grids, m_meta_map);
+ file.write(*m_grids, *m_meta_map);
file.close();
/* Should perhaps be an option at some point */
diff --git a/intern/openvdb/intern/openvdb_writer.h b/intern/openvdb/intern/openvdb_writer.h
index e710397..6f36d62 100644
--- a/intern/openvdb/intern/openvdb_writer.h
+++ b/intern/openvdb/intern/openvdb_writer.h
@@ -30,7 +30,7 @@
class OpenVDBWriter {
openvdb::GridPtrVecPtr m_grids;
- openvdb::MetaMap m_meta_map;
+ openvdb::MetaMap::Ptr m_meta_map;
int m_flags;
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index a9ed7ba..6a2c1e3 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -399,12 +399,13 @@ static void smokeModifier_freeDomain(SmokeModifierData *smd)
BKE_ptcache_free_list(&(smd->domain->ptcaches[0]));
smd->domain->point_cache[0] = NULL;
- MEM_freeN(smd->domain);
- smd->domain = NULL;
-
- for (cache = smd->domain->vdb_caches.first; cache; cache = cache->next) {
+ while ((cache = BLI_pophead(&(smd->domain->vdb_caches)))) {
+ OpenVDBWriter_free(cache->writer);
MEM_freeN(cache);
}
+
+ MEM_freeN(smd->domain);
+ smd->domain = NULL;
}
}
More information about the Bf-blender-cvs
mailing list