)]}'
{
  "commit": "d29f5247b8cbf5f2cb7b0e325a5eb1c7c5c1a91f",
  "tree": "b17cc67d7d830262267d264799f5ed4e95da8ed8",
  "parents": [
    "d8cf2243e0ed1c498ed405432c10f9596815a582"
  ],
  "author": {
    "name": "Michael Anthony Knyszek",
    "email": "mknyszek@google.com",
    "time": "Thu Feb 10 00:49:44 2022 +0000"
  },
  "committer": {
    "name": "Michael Knyszek",
    "email": "mknyszek@google.com",
    "time": "Tue Apr 26 22:15:21 2022 +0000"
  },
  "message": "runtime: refactor the scavenger and make it testable\n\nThis change refactors the scavenger into a type whose methods represent\nthe actual function and scheduling of the scavenger. It also stubs out\naccess to global state in order to make it testable.\n\nThis change thus also adds a test for the scavenger. In writing this\ntest, I discovered the lack of a behavior I expected: if the\npageAlloc.scavenge returns \u003c the bytes requested scavenged, that means\nthe heap is exhausted. This has been true this whole time, but was not\ndocumented or explicitly relied upon. This change rectifies that. In\ntheory this means the scavenger could spin in run() indefinitely (as\nhappened in the test) if shouldStop never told it to stop. In practice,\nshouldStop fires long before the heap is exhausted, but for future\nchanges it may be important. At the very least it\u0027s good to be\nintentional about these things.\n\nWhile we\u0027re here, I also moved the call to stopTimer out of wake and\ninto sleep. There\u0027s no reason to add more operations to a context that\u0027s\nalready precarious (running without a P on sysmon).\n\nChange-Id: Ib31b86379fd9df84f25ae282734437afc540da5c\nReviewed-on: https://go-review.googlesource.com/c/go/+/384734\nReviewed-by: Michael Pratt \u003cmpratt@google.com\u003e\nRun-TryBot: Michael Knyszek \u003cmknyszek@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0cf2fb4ea7c16985a9a47ca952aa38bbb5b7d728",
      "old_mode": 33188,
      "old_path": "src/runtime/export_test.go",
      "new_id": "3916eaf0e3b1ba13e14f88f1fbbb757da29b9e00",
      "new_mode": 33188,
      "new_path": "src/runtime/export_test.go"
    },
    {
      "type": "modify",
      "old_id": "5f50378adf60b76602f98534dd1920747adf7a9e",
      "old_mode": 33188,
      "old_path": "src/runtime/mgcscavenge.go",
      "new_id": "1abdbf3a0d4ab5b2ad0959e153319474b5cec612",
      "new_mode": 33188,
      "new_path": "src/runtime/mgcscavenge.go"
    },
    {
      "type": "modify",
      "old_id": "0659293c602f017194162ddf33147ec597000e05",
      "old_mode": 33188,
      "old_path": "src/runtime/mgcscavenge_test.go",
      "new_id": "8d922959614ae883b396309f36c40200ad936430",
      "new_mode": 33188,
      "new_path": "src/runtime/mgcscavenge_test.go"
    },
    {
      "type": "modify",
      "old_id": "d0b81fd3dfb9544c1a943833a15ed0bfb7c4400f",
      "old_mode": 33188,
      "old_path": "src/runtime/mgcsweep.go",
      "new_id": "a5e04d6ce6d42adc881cd64202d94e95ab486105",
      "new_mode": 33188,
      "new_path": "src/runtime/mgcsweep.go"
    },
    {
      "type": "modify",
      "old_id": "485bd65a9ecad735c37f6fc5aba45cfaf6a564eb",
      "old_mode": 33188,
      "old_path": "src/runtime/proc.go",
      "new_id": "b72194c76a52a3e1bfe8bdb4621b6fb574a5d7cb",
      "new_mode": 33188,
      "new_path": "src/runtime/proc.go"
    }
  ]
}
