)]}'
{
  "commit": "34c9b2b49be0bb0ea3efdc193fc0a8f615775f09",
  "tree": "d0a40b9e917242d4e1de24a08622c4acd89ae547",
  "parents": [
    "38ba82db783e7dde2e73212be71c92872d875e4d"
  ],
  "author": {
    "name": "John Baldwin",
    "email": "jhb@FreeBSD.org",
    "time": "Tue Feb 22 11:22:14 2022 -0800"
  },
  "committer": {
    "name": "John Baldwin",
    "email": "jhb@FreeBSD.org",
    "time": "Tue Feb 22 11:22:14 2022 -0800"
  },
  "message": "Don\u0027t enable async mode at the end of target ::resume methods.\n\nNow that target_resume always enables async mode after target::resume\nreturns, these calls are redundant.\n\nThe other place that target resume methods are invoked outside of\ntarget_resume are as the beneath target in record_full_wait_1.  In\nthis case, async mode should already be enabled when supported by the\ntarget before the resume method is invoked due to the following:\n\n  In general, targets which support async mode run as async until\n  ::wait returns TARGET_WAITKIND_NO_RESUMED to indicate that there are\n  no unwaited for children (either they have exited or are stopped).\n  When that occurs, the loop in wait_one disables async mode.  Later\n  if a stopped child is resumed, async mode is re-enabled in\n  do_target_resume before waiting for the next event.\n\n  In the case of record_full_wait_1, this function is invoked from the\n  ::wait target method when fetching an event.  If the underlying\n  target supports async mode, then an earlier call to do_target_resume\n  to resume the child reporting an event in the loop in\n  record_full_wait_1 would have already enabled async mode before\n  ::wait was invoked.  In addition, nothing in the code executed in\n  the loop in record_full_wait_1 disables async mode.  Async mode is\n  only disabled higher in the call stack in wait_one after ::wait\n  returns.\n\n  It is also true that async mode can be disabled by an\n  INF_EXEC_COMPLETE event passed to inferior_event_handle, but all of\n  the places that invoke that are in the gdb core which is \"above\" a\n  target ::wait method.\n\nNote that there is an earlier call to enable async mode in\nlinux_nat_target::resume.  That call also marks the async event pipe\nto report an existing event after enabling async mode, so it needs to\nstay.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5e22d1d3f98bff08ad4e9a007e0647e69dd12424",
      "old_mode": 33188,
      "old_path": "gdb/linux-nat.c",
      "new_id": "58660f0f80e457a1ee3fffe3779f1c41e45ce483",
      "new_mode": 33188,
      "new_path": "gdb/linux-nat.c"
    },
    {
      "type": "modify",
      "old_id": "76b21523853a3758e7f739f7befc2e176e893a22",
      "old_mode": 33188,
      "old_path": "gdb/record-full.c",
      "new_id": "bd8c49c1abea4e6d0a9a296b474ab5767c553fb8",
      "new_mode": 33188,
      "new_path": "gdb/record-full.c"
    },
    {
      "type": "modify",
      "old_id": "49eeb63445db35644f7a96e1ae3cb0f47de0b3f1",
      "old_mode": 33188,
      "old_path": "gdb/remote.c",
      "new_id": "f285beb9d140b23246e7606db46a8a99d7cd1a3b",
      "new_mode": 33188,
      "new_path": "gdb/remote.c"
    }
  ]
}
