ALSAInput::~ALSAInput()
{
- WARN_ON_ERROR("snd_pcm_close()", snd_pcm_close(pcm_handle));
+ if (pcm_handle) {
+ WARN_ON_ERROR("snd_pcm_close()", snd_pcm_close(pcm_handle));
+ }
}
void ALSAInput::start_capture_thread()
if (should_quit) {
// Don't call free_card(); that would be a deadlock.
+ WARN_ON_ERROR("snd_pcm_close()", snd_pcm_close(pcm_handle));
+ pcm_handle = nullptr;
return;
}
switch (do_capture()) {
case CaptureEndReason::REQUESTED_QUIT:
// Don't call free_card(); that would be a deadlock.
+ WARN_ON_ERROR("snd_pcm_close()", snd_pcm_close(pcm_handle));
+ pcm_handle = nullptr;
return;
case CaptureEndReason::DEVICE_GONE:
parent_pool->free_card(internal_dev_index);
+ WARN_ON_ERROR("snd_pcm_close()", snd_pcm_close(pcm_handle));
+ pcm_handle = nullptr;
return;
case CaptureEndReason::OTHER_ERROR:
parent_pool->set_card_state(internal_dev_index, ALSAPool::Device::State::STARTING);