Showing error 1179

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: kernel/futex.c
Line in file: 874
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-30 10:52:00 UTC


Source:

 844
 845                goto retryfull;
 846        }
 847
 848        head = &hb1->chain;
 849
 850        plist_for_each_entry_safe(this, next, head, list) {
 851                if (match_futex (&this->key, &key1)) {
 852                        wake_futex(this);
 853                        if (++ret >= nr_wake)
 854                                break;
 855                }
 856        }
 857
 858        if (op_ret > 0) {
 859                head = &hb2->chain;
 860
 861                op_ret = 0;
 862                plist_for_each_entry_safe(this, next, head, list) {
 863                        if (match_futex (&this->key, &key2)) {
 864                                wake_futex(this);
 865                                if (++op_ret >= nr_wake2)
 866                                        break;
 867                        }
 868                }
 869                ret += op_ret;
 870        }
 871
 872        spin_unlock(&hb1->lock);
 873        if (hb1 != hb2)
 874                spin_unlock(&hb2->lock);
 875out:
 876        futex_unlock_mm(fshared);
 877
 878        return ret;
 879}
 880
 881/*
 882 * Requeue all waiters hashed on one physical page to another
 883 * physical page.
 884 */
Show full sources