Showing error 1078

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: kernel/rtmutex.c
Line in file: 581
Project: Linux Kernel
Project version: 2.6.28
Tools: Undetermined 1
Entered: 2012-03-04 17:07:06 UTC


Source:

 551
 552                plist_del(&waiter->pi_list_entry, &owner->pi_waiters);
 553
 554                if (rt_mutex_has_waiters(lock)) {
 555                        struct rt_mutex_waiter *next;
 556
 557                        next = rt_mutex_top_waiter(lock);
 558                        plist_add(&next->pi_list_entry, &owner->pi_waiters);
 559                }
 560                __rt_mutex_adjust_prio(owner);
 561
 562                if (owner->pi_blocked_on)
 563                        chain_walk = 1;
 564
 565                spin_unlock_irqrestore(&owner->pi_lock, flags);
 566        }
 567
 568        WARN_ON(!plist_node_empty(&waiter->pi_list_entry));
 569
 570        if (!chain_walk)
 571                return;
 572
 573        /* gets dropped in rt_mutex_adjust_prio_chain()! */
 574        get_task_struct(owner);
 575
 576        spin_unlock(&lock->wait_lock);
 577
 578        rt_mutex_adjust_prio_chain(owner, 0, lock, NULL, current);
 579
 580        spin_lock(&lock->wait_lock);
 581}
 582
 583/*
 584 * Recheck the pi chain, in case we got a priority setting
 585 *
 586 * Called from sched_setscheduler
 587 */
 588void rt_mutex_adjust_pi(struct task_struct *task)
 589{
 590        struct rt_mutex_waiter *waiter;
 591        unsigned long flags;
Show full sources