From d1c4fe418babb41d18ef67d58d4a70945a029e34 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Tue, 13 Aug 2013 17:26:32 -0700 Subject: [PATCH] Midi-Mapper: Close gracefully on sigterm. --- mixer/src/midi-mapper.C | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/mixer/src/midi-mapper.C b/mixer/src/midi-mapper.C index ce9ce2a..b6cebdb 100644 --- a/mixer/src/midi-mapper.C +++ b/mixer/src/midi-mapper.C @@ -37,6 +37,7 @@ using namespace MIDI; #include #include +#include #include /* usleep */ /* simple program to translate from MIDI<->OSC Signals using a fixed mapping */ @@ -129,6 +130,10 @@ public: midi_output_port = 0; } + virtual ~Engine ( ) + { + deactivate(); + } int process ( nframes_t nframes ) { @@ -645,11 +650,24 @@ decode_nrpn ( nrpn_state *state, midievent e, int *take_action ) return NULL; } + +static volatile int got_sigterm = 0; + +void +sigterm_handler ( int ) +{ + got_sigterm = 1; +} + int main ( int argc, char **argv ) { nrpn_state nrpn_state[16]; + signal( SIGTERM, sigterm_handler ); + signal( SIGHUP, sigterm_handler ); + signal( SIGINT, sigterm_handler ); + nsm = nsm_new(); // set_nsm_callbacks( nsm ); @@ -686,7 +704,7 @@ main ( int argc, char **argv ) jack_midi_event_t ev; midievent e; - while ( true ) + while ( ! got_sigterm ) { osc->wait(20); check_nsm(); @@ -786,6 +804,12 @@ main ( int argc, char **argv ) } // e.pretty_print(); } + + // usleep( 500 ); } + + delete engine; + + return 0; }