mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
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:
parent
812654881a
commit
cb7503eba1
1 changed files with 17 additions and 26 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue