summaryrefslogtreecommitdiffstats
path: root/src/server/Engine.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-02-11 15:55:58 +0100
committerDavid Robillard <d@drobilla.net>2017-02-12 11:11:14 +0100
commitb6b8f7b3371c6c27055ec1fba970de56dd057a01 (patch)
tree9e8bd44a1c4196e962f87c0c68e8f0dc09554806 /src/server/Engine.cpp
parent740b0b7874c0393a14354eb447d689bc30da3eac (diff)
downloadingen-b6b8f7b3371c6c27055ec1fba970de56dd057a01.tar.gz
ingen-b6b8f7b3371c6c27055ec1fba970de56dd057a01.tar.bz2
ingen-b6b8f7b3371c6c27055ec1fba970de56dd057a01.zip
Fix memory leaks
Diffstat (limited to 'src/server/Engine.cpp')
-rw-r--r--src/server/Engine.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/server/Engine.cpp b/src/server/Engine.cpp
index 1a9d82b0..e70d5522 100644
--- a/src/server/Engine.cpp
+++ b/src/server/Engine.cpp
@@ -151,7 +151,13 @@ Engine::~Engine()
_post_processor->process();
}
+ delete _atom_interface;
+
+ // Delete run contexts
+ _quit_flag = true;
+ _tasks_available.notify_all();
for (RunContext* ctx : _run_contexts) {
+ ctx->join();
delete ctx;
}
for (Raul::RingBuffer* ring : _notifications) {
@@ -176,9 +182,11 @@ Engine::~Engine()
delete _pre_processor;
delete _post_processor;
delete _undo_stack;
+ delete _redo_stack;
delete _block_factory;
delete _control_bindings;
delete _broadcaster;
+ delete _sync_worker;
delete _worker;
delete _maid;
@@ -227,8 +235,10 @@ Engine::pending_notifications()
bool
Engine::wait_for_tasks()
{
- std::unique_lock<std::mutex> lock(_tasks_mutex);
- _tasks_available.wait(lock);
+ if (!_quit_flag) {
+ std::unique_lock<std::mutex> lock(_tasks_mutex);
+ _tasks_available.wait(lock);
+ }
return !_quit_flag;
}