Showing error 583

User: Jiri Slaby
Error type: Double Lock
Error type description: Some lock is locked twice unintentionally in a sequence
File location: sound/core/timer.c
Line in file: 484
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:19:59 UTC


Source:

 454        if (timeri == NULL || ticks < 1)
 455                return -EINVAL;
 456        if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) {
 457                result = snd_timer_start_slave(timeri);
 458                snd_timer_notify1(timeri, SNDRV_TIMER_EVENT_START);
 459                return result;
 460        }
 461        timer = timeri->timer;
 462        if (timer == NULL)
 463                return -EINVAL;
 464        spin_lock_irqsave(&timer->lock, flags);
 465        timeri->ticks = timeri->cticks = ticks;
 466        timeri->pticks = 0;
 467        result = snd_timer_start1(timer, timeri, ticks);
 468        spin_unlock_irqrestore(&timer->lock, flags);
 469        snd_timer_notify1(timeri, SNDRV_TIMER_EVENT_START);
 470        return result;
 471}
 472
 473static int _snd_timer_stop(struct snd_timer_instance * timeri,
 474                           int keep_flag, int event)
 475{
 476        struct snd_timer *timer;
 477        unsigned long flags;
 478
 479        if (snd_BUG_ON(!timeri))
 480                return -ENXIO;
 481
 482        if (timeri->flags & SNDRV_TIMER_IFLG_SLAVE) {
 483                if (!keep_flag) {
 484                        spin_lock_irqsave(&slave_active_lock, flags);
 485                        timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
 486                        spin_unlock_irqrestore(&slave_active_lock, flags);
 487                }
 488                goto __end;
 489        }
 490        timer = timeri->timer;
 491        if (!timer)
 492                return -EINVAL;
 493        spin_lock_irqsave(&timer->lock, flags);
 494        list_del_init(&timeri->ack_list);
Show full sources