User: | Jiri Slaby |
Error type: | Calling function from invalid context |
Error type description: | Some function is called at inappropriate place like sleep inside critical sections or interrupt handlers |
File location: | kernel/signal.c |
Line in file: | 1624 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2011-11-07 22:19:02 UTC |
1594 1595 BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP); 1596 1597 memset(&info, 0, sizeof info); 1598 info.si_signo = SIGTRAP; 1599 info.si_code = exit_code; 1600 info.si_pid = task_pid_vnr(current); 1601 info.si_uid = current->uid; 1602 1603 /* Let the debugger run. */ 1604 spin_lock_irq(¤t->sighand->siglock); 1605 ptrace_stop(exit_code, 1, &info); 1606 spin_unlock_irq(¤t->sighand->siglock); 1607} 1608 1609static void 1610finish_stop(int stop_count) 1611{ 1612 /* 1613 * If there are no other threads in the group, or if there is 1614 * a group stop in progress and we are the last to stop, 1615 * report to the parent. When ptraced, every thread reports itself. 1616 */ 1617 if (tracehook_notify_jctl(stop_count == 0, CLD_STOPPED)) { 1618 read_lock(&tasklist_lock); 1619 do_notify_parent_cldstop(current, CLD_STOPPED); 1620 read_unlock(&tasklist_lock); 1621 } 1622 1623 do { 1624 schedule(); 1625 } while (try_to_freeze()); 1626 /* 1627 * Now we don't run again until continued. 1628 */ 1629 current->exit_code = 0; 1630} 1631 1632/* 1633 * This performs the stopping for SIGSTOP and other stop signals. 1634 * We have to stop all threads in the thread group.