From 4de692ccf8c97cb156029375a10fc6a2aa2928fe Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 11 Nov 2020 23:24:34 +0100 Subject: Fix potential state memory leaks --- src/server/events/CreateBlock.cpp | 4 ++-- src/server/events/Delta.cpp | 12 +++++++----- src/server/events/Delta.hpp | 3 ++- 3 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src/server/events') diff --git a/src/server/events/CreateBlock.cpp b/src/server/events/CreateBlock.cpp index 712a9966..4dc64bdc 100644 --- a/src/server/events/CreateBlock.cpp +++ b/src/server/events/CreateBlock.cpp @@ -134,7 +134,7 @@ CreateBlock::pre_process(PreProcessContext& ctx) } // Load state from directory if given in properties - LilvState* state = nullptr; + StatePtr state{}; auto s = _properties.find(uris.state_state); if (s != _properties.end() && s->second.type() == uris.forge.Path) { state = LV2Block::load_state( @@ -147,7 +147,7 @@ CreateBlock::pre_process(PreProcessContext& ctx) polyphonic, _graph, _engine, - state))) { + state.get()))) { return Event::pre_process_done(Status::CREATION_FAILED, _path); } } diff --git a/src/server/events/Delta.cpp b/src/server/events/Delta.cpp index 33611b7a..911ace66 100644 --- a/src/server/events/Delta.cpp +++ b/src/server/events/Delta.cpp @@ -72,7 +72,7 @@ Delta::Delta(Engine& engine, , _object(nullptr) , _graph(nullptr) , _binding(nullptr) - , _state(nullptr) + , _state() , _context(msg.ctx) , _type(Type::PUT) , _block(false) @@ -390,8 +390,9 @@ Delta::pre_process(PreProcessContext& ctx) if (!uri.empty()) { op = SpecialType::PRESET; if ((_state = block->load_preset(uri))) { - lilv_state_emit_port_values( - _state, s_add_set_event, this); + lilv_state_emit_port_values(_state.get(), + s_add_set_event, + this); } else { _engine.log().warn("Failed to load preset <%1%>\n", uri); } @@ -597,10 +598,11 @@ Delta::post_process() if (_state) { auto* block = dynamic_cast(_object); if (block) { - block->apply_state(_engine.sync_worker(), _state); + block->apply_state(_engine.sync_worker(), _state.get()); block->set_enabled(true); } - lilv_state_free(_state); + + _state.reset(); } Broadcaster::Transfer t(*_engine.broadcaster()); diff --git a/src/server/events/Delta.hpp b/src/server/events/Delta.hpp index 4d749f02..fc4716f2 100644 --- a/src/server/events/Delta.hpp +++ b/src/server/events/Delta.hpp @@ -17,6 +17,7 @@ #ifndef INGEN_EVENTS_DELTA_HPP #define INGEN_EVENTS_DELTA_HPP +#include "BlockImpl.hpp" #include "ClientUpdate.hpp" #include "CompiledGraph.hpp" #include "ControlBindings.hpp" @@ -119,7 +120,7 @@ private: GraphImpl* _graph; Raul::managed_ptr _compiled_graph; ControlBindings::Binding* _binding; - LilvState* _state; + StatePtr _state; Resource::Graph _context; Type _type; -- cgit v1.2.1