diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/core/timer.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c index 00618703c58f..2d6e3e76ddf5 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c | |||
@@ -294,8 +294,21 @@ int snd_timer_open(struct snd_timer_instance **ti, | |||
294 | get_device(&timer->card->card_dev); | 294 | get_device(&timer->card->card_dev); |
295 | timeri->slave_class = tid->dev_sclass; | 295 | timeri->slave_class = tid->dev_sclass; |
296 | timeri->slave_id = slave_id; | 296 | timeri->slave_id = slave_id; |
297 | if (list_empty(&timer->open_list_head) && timer->hw.open) | 297 | |
298 | timer->hw.open(timer); | 298 | if (list_empty(&timer->open_list_head) && timer->hw.open) { |
299 | int err = timer->hw.open(timer); | ||
300 | if (err) { | ||
301 | kfree(timeri->owner); | ||
302 | kfree(timeri); | ||
303 | |||
304 | if (timer->card) | ||
305 | put_device(&timer->card->card_dev); | ||
306 | module_put(timer->module); | ||
307 | mutex_unlock(®ister_mutex); | ||
308 | return err; | ||
309 | } | ||
310 | } | ||
311 | |||
299 | list_add_tail(&timeri->open_list, &timer->open_list_head); | 312 | list_add_tail(&timeri->open_list, &timer->open_list_head); |
300 | snd_timer_check_master(timeri); | 313 | snd_timer_check_master(timeri); |
301 | mutex_unlock(®ister_mutex); | 314 | mutex_unlock(®ister_mutex); |