User: | Jiri Slaby |
Error type: | Double Unlock |
Error type description: | Some lock is unlocked twice unintentionally in a sequence |
File location: | kernel/signal.c |
Line in file: | 1882 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2012-04-30 10:52:00 UTC |
1852 continue; 1853 } 1854 1855 spin_unlock_irq(&sighand->siglock); 1856 1857 /* 1858 * Anything else is fatal, maybe with a core dump. 1859 */ 1860 current->flags |= PF_SIGNALED; 1861 1862 if (sig_kernel_coredump(signr)) { 1863 if (print_fatal_signals) 1864 print_fatal_signal(regs, info->si_signo); 1865 /* 1866 * If it was able to dump core, this kills all 1867 * other threads in the group and synchronizes with 1868 * their demise. If we lost the race with another 1869 * thread getting here, it set group_exit_code 1870 * first and our do_group_exit call below will use 1871 * that value and ignore the one we pass it. 1872 */ 1873 do_coredump(info->si_signo, info->si_signo, regs); 1874 } 1875 1876 /* 1877 * Death signals, no core dump. 1878 */ 1879 do_group_exit(info->si_signo); 1880 /* NOTREACHED */ 1881 } 1882 spin_unlock_irq(&sighand->siglock); 1883 return signr; 1884} 1885 1886void exit_signals(struct task_struct *tsk) 1887{ 1888 int group_stop = 0; 1889 struct task_struct *t; 1890 1891 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) { 1892 tsk->flags |= PF_EXITING;