)]}'
{
  "commit": "ce3986bb224067ecdb372d7cb7a56d22682e9a31",
  "tree": "8c0a684e215180869dd519e7c3255d187de2956a",
  "parents": [
    "6cd33dceed60949e2dbc32e3f0f5e67c4c882e1e"
  ],
  "author": {
    "name": "Josh Steadmon",
    "email": "steadmon@google.com",
    "time": "Tue Jun 07 11:21:57 2022 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Tue Jun 07 12:48:19 2022 -0700"
  },
  "message": "run-command: don\u0027t spam trace2_child_exit()\n\nIn rare cases[1], wait_or_whine() cannot determine a child process\u0027s\nstatus (and will return -1 in this case). This can cause Git to issue\ntrace2 child_exit events despite the fact that the child may still be\nrunning. In pathological cases, we\u0027ve seen \u003e 80 million exit events in\nour trace logs for a single child process.\n\nFix this by only issuing trace2 events in finish_command_in_signal() if\nwe get a value other than -1 from wait_or_whine(). This can lead to\nmissing child_exit events in such a case, but that is preferable to\nduplicating events on a scale that threatens to fill the user\u0027s\nfilesystem with invalid trace logs.\n\n[1]: This can happen when:\n\n* waitpid() returns -1 and errno !\u003d EINTR\n* waitpid() returns an invalid PID\n* the status set by waitpid() has neither the WIFEXITED() nor\n  WIFSIGNALED() flags\n\nSigned-off-by: Josh Steadmon \u003csteadmon@google.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a8501e38cebe50f6a1fefb6d31d92ce049b96ac3",
      "old_mode": 33188,
      "old_path": "run-command.c",
      "new_id": "e0fe2418a296326e227fbe032b803a041ed374f2",
      "new_mode": 33188,
      "new_path": "run-command.c"
    }
  ]
}
