diff options
Diffstat (limited to 'sound/core/timer.c')
-rw-r--r-- | sound/core/timer.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c index 7c1cbf0a0dc4..67ebf1c21c04 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c | |||
@@ -328,6 +328,8 @@ int snd_timer_close(struct snd_timer_instance *timeri) | |||
328 | mutex_unlock(®ister_mutex); | 328 | mutex_unlock(®ister_mutex); |
329 | } else { | 329 | } else { |
330 | timer = timeri->timer; | 330 | timer = timeri->timer; |
331 | if (snd_BUG_ON(!timer)) | ||
332 | goto out; | ||
331 | /* wait, until the active callback is finished */ | 333 | /* wait, until the active callback is finished */ |
332 | spin_lock_irq(&timer->lock); | 334 | spin_lock_irq(&timer->lock); |
333 | while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) { | 335 | while (timeri->flags & SNDRV_TIMER_IFLG_CALLBACK) { |
@@ -353,6 +355,7 @@ int snd_timer_close(struct snd_timer_instance *timeri) | |||
353 | } | 355 | } |
354 | mutex_unlock(®ister_mutex); | 356 | mutex_unlock(®ister_mutex); |
355 | } | 357 | } |
358 | out: | ||
356 | if (timeri->private_free) | 359 | if (timeri->private_free) |
357 | timeri->private_free(timeri); | 360 | timeri->private_free(timeri); |
358 | kfree(timeri->owner); | 361 | kfree(timeri->owner); |
@@ -531,6 +534,8 @@ int snd_timer_stop(struct snd_timer_instance *timeri) | |||
531 | if (err < 0) | 534 | if (err < 0) |
532 | return err; | 535 | return err; |
533 | timer = timeri->timer; | 536 | timer = timeri->timer; |
537 | if (!timer) | ||
538 | return -EINVAL; | ||
534 | spin_lock_irqsave(&timer->lock, flags); | 539 | spin_lock_irqsave(&timer->lock, flags); |
535 | timeri->cticks = timeri->ticks; | 540 | timeri->cticks = timeri->ticks; |
536 | timeri->pticks = 0; | 541 | timeri->pticks = 0; |