diff --git a/lib/midi b/lib/midi index fb7d285..ed5d959 160000 --- a/lib/midi +++ b/lib/midi @@ -1 +1 @@ -Subproject commit fb7d28563bf731b0a689ce9902dfad0ec9e63b19 +Subproject commit ed5d959e60fd021ae4e545e0b39fe90cd1ec35a1 diff --git a/src/main.cc b/src/main.cc index 0cbc6c9..34b7c10 100644 --- a/src/main.cc +++ b/src/main.cc @@ -81,6 +81,7 @@ struct Runner midi::ALSA alsa; Interpreter interpreter; std::thread midi_input_event_loop; + std::stop_source stop_source; /// Setup interpreter and midi connection with given port Runner(std::string input_port, std::string output_port) @@ -106,6 +107,7 @@ struct Runner if (alsa_go) { interpreter.register_callbacks(); midi_input_event_loop = std::thread([this] { handle_midi_event_loop(); }); + midi_input_event_loop.detach(); } Env::global->force_define("say", +[](Interpreter&, std::vector args) -> Result { @@ -119,6 +121,11 @@ struct Runner }); } + ~Runner() + { + stop_source.request_stop(); + } + Runner(Runner const&) = delete; Runner(Runner &&) = delete; Runner& operator=(Runner const&) = delete; @@ -126,7 +133,7 @@ struct Runner void handle_midi_event_loop() { - alsa.input_event_loop(); + alsa.input_event_loop(stop_source.get_token()); } /// Run given source