mirror of
https://github.com/AxioDL/boo.git
synced 2025-05-15 11:51:27 +00:00
More reliable MIDI thread-exit signal
This commit is contained in:
parent
36aa2b06a4
commit
d57469e1e1
@ -366,14 +366,24 @@ struct ALSAAudioVoiceEngine : BaseAudioVoiceEngine
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Empty handler for SIGQUIT */
|
||||
static void _sigquit(int) {}
|
||||
|
||||
static void MIDIReceiveProc(snd_rawmidi_t* midi, const ReceiveFunctor& receiver, bool& running)
|
||||
{
|
||||
struct sigaction s;
|
||||
s.sa_handler = _sigquit;
|
||||
sigemptyset(&s.sa_mask);
|
||||
s.sa_flags = 0;
|
||||
sigaction(SIGQUIT, &s, nullptr);
|
||||
|
||||
uint8_t buf[512];
|
||||
while (running)
|
||||
{
|
||||
int rdBytes = snd_rawmidi_read(midi, buf, 512);
|
||||
if (rdBytes < 0)
|
||||
{
|
||||
if (rdBytes != -EINTR)
|
||||
Log.report(logvisor::Error, "MIDI connection lost");
|
||||
running = false;
|
||||
break;
|
||||
@ -396,7 +406,7 @@ struct ALSAAudioVoiceEngine : BaseAudioVoiceEngine
|
||||
~MIDIIn()
|
||||
{
|
||||
m_midiRunning = false;
|
||||
pthread_kill(m_midiThread.native_handle(), SIGTERM);
|
||||
pthread_kill(m_midiThread.native_handle(), SIGQUIT);
|
||||
if (m_midiThread.joinable())
|
||||
m_midiThread.join();
|
||||
snd_rawmidi_close(m_midi);
|
||||
@ -449,7 +459,7 @@ struct ALSAAudioVoiceEngine : BaseAudioVoiceEngine
|
||||
~MIDIInOut()
|
||||
{
|
||||
m_midiRunning = false;
|
||||
pthread_kill(m_midiThread.native_handle(), SIGTERM);
|
||||
pthread_kill(m_midiThread.native_handle(), SIGQUIT);
|
||||
if (m_midiThread.joinable())
|
||||
m_midiThread.join();
|
||||
snd_rawmidi_close(m_midiIn);
|
||||
|
Loading…
x
Reference in New Issue
Block a user