)]}'
{
  "commit": "6ca3eb03dfc2ec15b5cb1a66e77caadc71075763",
  "tree": "7ee73677c4fe2a5395fdb813b1da1f10f78d135c",
  "parents": [
    "e8d321eab015fdac193488ca80676aafc248f81d"
  ],
  "author": {
    "name": "Jason A. Donenfeld",
    "email": "Jason@zx2c4.com",
    "time": "Wed Mar 10 07:33:27 2021 -0700"
  },
  "committer": {
    "name": "Jason A. Donenfeld",
    "email": "Jason@zx2c4.com",
    "time": "Fri May 21 09:01:06 2021 +0000"
  },
  "message": "windows: use Go-managed pointer list for ProcThreadAttributeList\n\nIt turns out that if you write Go pointers to Go memory, the Go compiler\nmust be involved so that it generates various calls to the GC in the\nprocess. Letting Windows write Go pointers to Go memory violated this.\n\nWe fix this by having all the Windows-managed memory be just a boring\n[]byte blob. Then, in order to prevent the GC from prematurely cleaning\nup the pointers referenced by that []byte blob, or in the future moving\nmemory and attempting to fix up pointers, we copy the data to the\nWindows heap and then maintain a little array of pointers that have been\nused. Every time the Update function is called with a new pointer, we\nmake a copy and append it to the list.  Then, on Delete, we free the\npointers from the Windows heap.\n\nUpdates golang/go#44900.\n\nChange-Id: I42340a93fd9f6b8d10340634cf833fd4559a5f4f\nReviewed-on: https://go-review.googlesource.com/c/sys/+/300369\nTrust: Jason A. Donenfeld \u003cJason@zx2c4.com\u003e\nRun-TryBot: Jason A. Donenfeld \u003cJason@zx2c4.com\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a020caeef8e5aa391135b167894909b8a3cee33b",
      "old_mode": 33188,
      "old_path": "windows/exec_windows.go",
      "new_id": "7a11e83b7ec10206ebaf5b547690db3cfeb1de90",
      "new_mode": 33188,
      "new_path": "windows/exec_windows.go"
    },
    {
      "type": "modify",
      "old_id": "d6571b71662e14cb19bd0234d46fc55e25ff4c48",
      "old_mode": 33188,
      "old_path": "windows/syscall_windows_test.go",
      "new_id": "0aaa0a33ea228e2048f68a98831ba44842a86c5d",
      "new_mode": 33188,
      "new_path": "windows/syscall_windows_test.go"
    },
    {
      "type": "modify",
      "old_id": "23fe18ecef2123da402d09a306def62d35d9f999",
      "old_mode": 33188,
      "old_path": "windows/types_windows.go",
      "new_id": "1f733398ee4c054ce6b62a52830620e33d490256",
      "new_mode": 33188,
      "new_path": "windows/types_windows.go"
    }
  ]
}
