aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/rtpmidi.c
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2019-12-11 23:30:46 +0100
committercbdev <cb@cbcdn.com>2019-12-11 23:30:46 +0100
commit1bde6249ab6b44764ff2d7ef79e2f22ddf9a7082 (patch)
tree98ce0687eaba37687cb96a86ad2c77742139c8ae /backends/rtpmidi.c
parent9624d46436576b415c639ea7390012cdd95c88f7 (diff)
downloadmidimonster-1bde6249ab6b44764ff2d7ef79e2f22ddf9a7082.tar.gz
midimonster-1bde6249ab6b44764ff2d7ef79e2f22ddf9a7082.tar.bz2
midimonster-1bde6249ab6b44764ff2d7ef79e2f22ddf9a7082.zip
rtpmidi shutdown procedure
Diffstat (limited to 'backends/rtpmidi.c')
-rw-r--r--backends/rtpmidi.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/backends/rtpmidi.c b/backends/rtpmidi.c
index 38cc9c1..77819ee 100644
--- a/backends/rtpmidi.c
+++ b/backends/rtpmidi.c
@@ -323,10 +323,9 @@ static int rtpmidi_handle(size_t num, managed_fd* fds){
return 1;
}
-static int rtpmidi_start(){
- size_t n, u, fds = 0;
+static int rtpmidi_start(size_t n, instance** inst){
+ size_t u, fds = 0;
int rv = 1;
- instance** inst = NULL;
rtpmidi_instance_data* data = NULL;
//if mdns name defined and no socket, bind default values
@@ -349,12 +348,6 @@ static int rtpmidi_start(){
fprintf(stderr, "No mDNS discovery interface bound, AppleMIDI session discovery disabled\n");
}
- //fetch all defined instances
- if(mm_backend_instances(BACKEND_NAME, &n, &inst)){
- fprintf(stderr, "Failed to fetch instance list\n");
- return 1;
- }
-
for(u = 0; u < n; u++){
data = (rtpmidi_instance_data*) inst[u]->impl;
//check whether instances are explicitly configured to a mode
@@ -385,12 +378,39 @@ static int rtpmidi_start(){
fprintf(stderr, "rtpmidi backend registered %" PRIsize_t " descriptors to core\n", fds);
rv = 0;
bail:
- free(inst);
return rv;
}
-static int rtpmidi_shutdown(){
- //TODO cleanup instance data
+static int rtpmidi_shutdown(size_t n, instance** inst){
+ rtpmidi_instance_data* data = NULL;
+ size_t u;
+
+ for(u = 0; u < n; u++){
+ data = (rtpmidi_instance_data*) inst[u]->impl;
+ if(data->fd >= 0){
+ close(data->fd);
+ }
+
+ if(data->control_fd >= 0){
+ close(data->control_fd);
+ }
+
+ free(data->session_name);
+ data->session_name = NULL;
+
+ free(data->invite_peers);
+ data->invite_peers = NULL;
+
+ free(data->invite_accept);
+ data->invite_accept = NULL;
+
+ free(data->peer);
+ data->peer = NULL;
+ data->peers = 0;
+
+ free(inst[u]->impl);
+ inst[u]->impl = NULL;
+ }
free(cfg.mdns_name);
if(cfg.mdns_fd >= 0){