cb2a66c687
This reverts commit 18bd41cdd9.
Conflicts:
media-plugins/alsa-plugins/Manifest
61 lines
1.6 KiB
Diff
61 lines
1.6 KiB
Diff
commit a256766c10c52cb6667de8a65f5cbb332fad4cc7
|
|
Author: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Mon Dec 21 09:09:42 2009 +0100
|
|
|
|
pcm: Close event timer in pcm_hw plugin
|
|
|
|
Dan McCombs discovered that snd_pcm_close() invocations are not leading
|
|
to associated timers being closed, which results in successively more
|
|
timers being created but not freed.
|
|
|
|
Original patch from Daniel T Chen <crimsun@ubuntu.com>.
|
|
|
|
BugLink: https://bugs.launchpad.net/bugs/451893
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
|
|
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
|
|
index 2095b01..b557912 100644
|
|
--- a/src/pcm/pcm_hw.c
|
|
+++ b/src/pcm/pcm_hw.c
|
|
@@ -338,18 +338,6 @@ static int snd_pcm_hw_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t * params)
|
|
return 0;
|
|
}
|
|
|
|
-static int snd_pcm_hw_hw_free(snd_pcm_t *pcm)
|
|
-{
|
|
- snd_pcm_hw_t *hw = pcm->private_data;
|
|
- int fd = hw->fd, err;
|
|
- if (ioctl(fd, SNDRV_PCM_IOCTL_HW_FREE) < 0) {
|
|
- err = -errno;
|
|
- SYSMSG("SNDRV_PCM_IOCTL_HW_FREE failed");
|
|
- return err;
|
|
- }
|
|
- return 0;
|
|
-}
|
|
-
|
|
static void snd_pcm_hw_close_timer(snd_pcm_hw_t *hw)
|
|
{
|
|
if (hw->period_timer) {
|
|
@@ -421,6 +409,20 @@ static int snd_pcm_hw_change_timer(snd_pcm_t *pcm, int enable)
|
|
} else {
|
|
snd_pcm_hw_close_timer(hw);
|
|
pcm->fast_ops = &snd_pcm_hw_fast_ops;
|
|
+ hw->period_event = 0;
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int snd_pcm_hw_hw_free(snd_pcm_t *pcm)
|
|
+{
|
|
+ snd_pcm_hw_t *hw = pcm->private_data;
|
|
+ int fd = hw->fd, err;
|
|
+ snd_pcm_hw_change_timer(pcm, 0);
|
|
+ if (ioctl(fd, SNDRV_PCM_IOCTL_HW_FREE) < 0) {
|
|
+ err = -errno;
|
|
+ SYSMSG("SNDRV_PCM_IOCTL_HW_FREE failed");
|
|
+ return err;
|
|
}
|
|
return 0;
|
|
}
|