)]}'
{
  "commit": "16882c1e962b4be5122fc05aaf2afc10fd9e2d15",
  "tree": "c39cae4ae4874998d7e3486cd57d57613b05a89c",
  "parents": [
    "39b945a37bac2b692773a470890c8ba301485b15"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@tv-sign.ru",
    "time": "Sun Jun 08 21:20:41 2008 +0400"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Tue Jun 10 11:37:25 2008 +0200"
  },
  "message": "sched: fix TASK_WAKEKILL vs SIGKILL race\n\nschedule() has the special \"TASK_INTERRUPTIBLE \u0026\u0026 signal_pending()\" case,\nthis allows us to do\n\n\tcurrent-\u003estate \u003d TASK_INTERRUPTIBLE;\n\tschedule();\n\nwithout fear to sleep with pending signal.\n\nHowever, the code like\n\n\tcurrent-\u003estate \u003d TASK_KILLABLE;\n\tschedule();\n\nis not right, schedule() doesn\u0027t take TASK_WAKEKILL into account. This means\nthat mutex_lock_killable(), wait_for_completion_killable(), down_killable(),\nschedule_timeout_killable() can miss SIGKILL (and btw the second SIGKILL has\nno effect).\n\nIntroduce the new helper, signal_pending_state(), and change schedule() to\nuse it. Hopefully it will have more users, that is why the task\u0027s state is\npassed separately.\n\nNote this \"__TASK_STOPPED | __TASK_TRACED\" check in signal_pending_state().\nThis is needed to preserve the current behaviour (ptrace_notify). I hope\nthis check will be removed soon, but this (afaics good) change needs the\nseparate discussion.\n\nThe fast path is \"(state \u0026 (INTERRUPTIBLE | WAKEKILL)) + signal_pending(p)\",\nbasically the same that schedule() does now. However, this patch of course\nbloats schedule().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ae0be3c6237543f63da1a64bc7cf0b0dc3d8b88d",
      "old_mode": 33188,
      "old_path": "include/linux/sched.h",
      "new_id": "c5d3f847ca8d05bd52ca575608c2d428a23d1b28",
      "new_mode": 33188,
      "new_path": "include/linux/sched.h"
    },
    {
      "type": "modify",
      "old_id": "bfb8ad8ed1717bf95f82ddf7ea8b5b40bb7fbe7b",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "2c65bf29d133f3b734965fb809a105fdb0358a12",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    }
  ]
}
