summaryrefslogtreecommitdiff
path: root/synth
diff options
context:
space:
mode:
Diffstat (limited to 'synth')
-rw-r--r--synth/main.cpp3
-rw-r--r--synth/note_loader.cpp10
-rw-r--r--synth/note_loader.h2
3 files changed, 14 insertions, 1 deletions
diff --git a/synth/main.cpp b/synth/main.cpp
index 646e371..25287eb 100644
--- a/synth/main.cpp
+++ b/synth/main.cpp
@@ -186,6 +186,9 @@ void cleanup()
channel[i]=NULL;
}
+ for (int i=0;i<128;i++)
+ maybe_unload_note(program_settings[i]);
+
delete [] program_settings;
}
diff --git a/synth/note_loader.cpp b/synth/note_loader.cpp
index b7ccc99..28613b9 100644
--- a/synth/note_loader.cpp
+++ b/synth/note_loader.cpp
@@ -42,3 +42,13 @@ void load_note_from_so(string file, program_t &prog)
throw err;
}
}
+
+void maybe_unload_note(program_t &prog)
+{
+ if (prog.dl_handle)
+ {
+ dlclose(prog.dl_handle);
+ prog.dl_handle=NULL;
+ prog.create_func=NULL;
+ }
+}
diff --git a/synth/note_loader.h b/synth/note_loader.h
index a922f3c..6731da1 100644
--- a/synth/note_loader.h
+++ b/synth/note_loader.h
@@ -9,5 +9,5 @@
using namespace std;
void load_note_from_so(string file, program_t &prog); //throws string
-
+void maybe_unload_note(program_t &prog);
#endif