pcm: hw: deallocate fallback buffer when trials of unmapping finished

In current implementation, deallocation of fallback buffer is done at
several places.

This commit unifies these deallocations in one place.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Sakamoto 2017-06-25 13:41:21 +09:00 committed by Takashi Iwai
parent 812654881a
commit cb7503eba1

View file

@ -943,44 +943,35 @@ static int map_status_and_control_data(snd_pcm_t *pcm, bool force_fallback)
return 0;
}
static int unmap_status_data(snd_pcm_hw_t *hw)
static void unmap_status_data(snd_pcm_hw_t *hw)
{
int err;
if (hw->sync_ptr_ioctl) {
free(hw->sync_ptr);
hw->sync_ptr = NULL;
} else {
if (munmap((void*)hw->mmap_status, page_align(sizeof(*hw->mmap_status))) < 0) {
err = -errno;
SYSMSG("status munmap failed (%i)", err);
return err;
}
if (!hw->sync_ptr) {
if (munmap((void *)hw->mmap_status,
page_align(sizeof(*hw->mmap_status))) < 0)
SYSMSG("status munmap failed (%u)", errno);
}
return 0;
}
static int unmap_control_data(snd_pcm_hw_t *hw)
static void unmap_control_data(snd_pcm_hw_t *hw)
{
int err;
if (hw->sync_ptr_ioctl) {
free(hw->sync_ptr);
hw->sync_ptr = NULL;
} else {
if (munmap(hw->mmap_control, page_align(sizeof(*hw->mmap_control))) < 0) {
err = -errno;
SYSMSG("control munmap failed (%i)", err);
return err;
}
if (!hw->sync_ptr) {
if (munmap((void *)hw->mmap_control,
page_align(sizeof(*hw->mmap_control))) < 0)
SYSMSG("control munmap failed (%u)", errno);
}
return 0;
}
static void unmap_status_and_control_data(snd_pcm_hw_t *hw)
{
unmap_status_data(hw);
unmap_control_data(hw);
if (hw->sync_ptr)
free(hw->sync_ptr);
hw->mmap_status = NULL;
hw->mmap_control = NULL;
hw->sync_ptr = NULL;
}
static int snd_pcm_hw_mmap(snd_pcm_t *pcm ATTRIBUTE_UNUSED)