diff options
-rw-r--r-- | sound/drivers/aloop.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index 0333143a1fa7..0a08e63e9c66 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c | |||
@@ -192,6 +192,11 @@ static inline void loopback_timer_stop(struct loopback_pcm *dpcm) | |||
192 | dpcm->timer.expires = 0; | 192 | dpcm->timer.expires = 0; |
193 | } | 193 | } |
194 | 194 | ||
195 | static inline void loopback_timer_stop_sync(struct loopback_pcm *dpcm) | ||
196 | { | ||
197 | del_timer_sync(&dpcm->timer); | ||
198 | } | ||
199 | |||
195 | #define CABLE_VALID_PLAYBACK (1 << SNDRV_PCM_STREAM_PLAYBACK) | 200 | #define CABLE_VALID_PLAYBACK (1 << SNDRV_PCM_STREAM_PLAYBACK) |
196 | #define CABLE_VALID_CAPTURE (1 << SNDRV_PCM_STREAM_CAPTURE) | 201 | #define CABLE_VALID_CAPTURE (1 << SNDRV_PCM_STREAM_CAPTURE) |
197 | #define CABLE_VALID_BOTH (CABLE_VALID_PLAYBACK|CABLE_VALID_CAPTURE) | 202 | #define CABLE_VALID_BOTH (CABLE_VALID_PLAYBACK|CABLE_VALID_CAPTURE) |
@@ -326,6 +331,8 @@ static int loopback_prepare(struct snd_pcm_substream *substream) | |||
326 | struct loopback_cable *cable = dpcm->cable; | 331 | struct loopback_cable *cable = dpcm->cable; |
327 | int bps, salign; | 332 | int bps, salign; |
328 | 333 | ||
334 | loopback_timer_stop_sync(dpcm); | ||
335 | |||
329 | salign = (snd_pcm_format_width(runtime->format) * | 336 | salign = (snd_pcm_format_width(runtime->format) * |
330 | runtime->channels) / 8; | 337 | runtime->channels) / 8; |
331 | bps = salign * runtime->rate; | 338 | bps = salign * runtime->rate; |
@@ -744,7 +751,7 @@ static int loopback_close(struct snd_pcm_substream *substream) | |||
744 | struct loopback *loopback = substream->private_data; | 751 | struct loopback *loopback = substream->private_data; |
745 | struct loopback_pcm *dpcm = substream->runtime->private_data; | 752 | struct loopback_pcm *dpcm = substream->runtime->private_data; |
746 | 753 | ||
747 | loopback_timer_stop(dpcm); | 754 | loopback_timer_stop_sync(dpcm); |
748 | mutex_lock(&loopback->cable_lock); | 755 | mutex_lock(&loopback->cable_lock); |
749 | free_cable(substream); | 756 | free_cable(substream); |
750 | mutex_unlock(&loopback->cable_lock); | 757 | mutex_unlock(&loopback->cable_lock); |