summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-01 19:24:22 +0000
committerDavid Robillard <d@drobilla.net>2010-02-01 19:24:22 +0000
commit6e8877ee110b774caef800adbe35b21338b3372f (patch)
tree0d363e811d64da8aa8368c37830a562b1fe6e70e
parentfeb7439d70871aa9663e7c4218671a3c26717fbb (diff)
downloadingen-6e8877ee110b774caef800adbe35b21338b3372f.tar.gz
ingen-6e8877ee110b774caef800adbe35b21338b3372f.tar.bz2
ingen-6e8877ee110b774caef800adbe35b21338b3372f.zip
Fix leaks and an iterator error found by cppcheck.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2399 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/engine/InputPort.cpp8
-rw-r--r--src/engine/PatchImpl.cpp2
-rw-r--r--src/gui/LoadPatchWindow.cpp4
-rw-r--r--src/gui/LoadSubpatchWindow.cpp4
4 files changed, 15 insertions, 3 deletions
diff --git a/src/engine/InputPort.cpp b/src/engine/InputPort.cpp
index 80ae836d..cc72a7c5 100644
--- a/src/engine/InputPort.cpp
+++ b/src/engine/InputPort.cpp
@@ -163,10 +163,16 @@ InputPort::remove_connection(const OutputPort* src_port)
ThreadManager::assert_thread(THREAD_PROCESS);
Connections::Node* connection = NULL;
- for (Connections::iterator i = _connections.begin(); i != _connections.end(); ++i)
+ for (Connections::iterator i = _connections.begin(); i != _connections.end();) {
+ Connections::iterator next = i;
+ ++next;
+
if ((*i)->src_port() == src_port)
connection = _connections.erase(i);
+ i = next;
+ }
+
if ( ! connection) {
error << "[InputPort::remove_connection] Connection not found!" << endl;
return NULL;
diff --git a/src/engine/PatchImpl.cpp b/src/engine/PatchImpl.cpp
index 96841b33..771c9d6d 100644
--- a/src/engine/PatchImpl.cpp
+++ b/src/engine/PatchImpl.cpp
@@ -377,6 +377,7 @@ PatchImpl::remove_port(const string& symbol)
if ((*i)->symbol() == symbol) {
ret = _input_ports.erase(i);
found = true;
+ break;
}
}
@@ -385,6 +386,7 @@ PatchImpl::remove_port(const string& symbol)
if ((*i)->symbol() == symbol) {
ret = _output_ports.erase(i);
found = true;
+ break;
}
}
diff --git a/src/gui/LoadPatchWindow.cpp b/src/gui/LoadPatchWindow.cpp
index 86e0d448..cb3aaf06 100644
--- a/src/gui/LoadPatchWindow.cpp
+++ b/src/gui/LoadPatchWindow.cpp
@@ -72,8 +72,10 @@ LoadPatchWindow::LoadPatchWindow(BaseObjectType* cobject, const Glib::RefPtr<Gno
// Add global examples directory to "shortcut folders" (bookmarks)
const string examples_dir = Shared::data_file_path("patches");
DIR* d = opendir(examples_dir.c_str());
- if (d != NULL)
+ if (d != NULL) {
add_shortcut_folder(examples_dir);
+ closedir(d);
+ }
}
diff --git a/src/gui/LoadSubpatchWindow.cpp b/src/gui/LoadSubpatchWindow.cpp
index e580fa49..ef56a945 100644
--- a/src/gui/LoadSubpatchWindow.cpp
+++ b/src/gui/LoadSubpatchWindow.cpp
@@ -70,8 +70,10 @@ LoadSubpatchWindow::LoadSubpatchWindow(BaseObjectType* cobject, const Glib::RefP
// Add global examples directory to "shortcut folders" (bookmarks)
const string examples_dir = Shared::data_file_path("patches");
DIR* d = opendir(examples_dir.c_str());
- if (d != NULL)
+ if (d != NULL) {
add_shortcut_folder(examples_dir);
+ closedir(d);
+ }
}