)]}'
{
  "log": [
    {
      "commit": "ec11c4a93de22cde2abe2bf74d70791033c2464c",
      "tree": "6b744b348ad1fb135e1995cc682600e3bc6ce59b",
      "parents": [
        "1a583072c11b16c643c8f6051ff1fab5a424d0a9"
      ],
      "author": {
        "name": "Savelii Pototskii",
        "email": "savelii.pototskii@gmail.com",
        "time": "Thu Feb 19 18:32:03 2026 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Mon Feb 23 10:54:42 2026 -0800"
      },
      "message": "errgroup: fix a typo in the documentation\n\nChange-Id: I265cbc977e15a81c0068e7b60933843d8f02fe6a\nReviewed-on: https://go-review.googlesource.com/c/sync/+/747140\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\n"
    },
    {
      "commit": "1a583072c11b16c643c8f6051ff1fab5a424d0a9",
      "tree": "2c46980101ea138681193c7da0b4b316c0ceeca3",
      "parents": [
        "3172ca581eb96530283f713311f81df986c19932"
      ],
      "author": {
        "name": "Oleksandr Redko",
        "email": "oleksandr.red+github@gmail.com",
        "time": "Wed Feb 11 14:01:44 2026 +0200"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Feb 11 15:00:50 2026 -0800"
      },
      "message": "all: modernize interface{} -\u003e any\n\nProduced with the command:\n\n$ go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -any -test -fix ./...\n\nChange-Id: I09993badc57974a708d348a492ba3ea39f27052e\nReviewed-on: https://go-review.googlesource.com/c/sync/+/744340\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Michael Pratt \u003cmpratt@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\n"
    },
    {
      "commit": "3172ca581eb96530283f713311f81df986c19932",
      "tree": "057d824116d5391acea60f01c1af7d525d18ae3f",
      "parents": [
        "2a180e22fddcc336475e72aa950be958c1b68d33"
      ],
      "author": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Feb 11 18:54:08 2026 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Feb 11 11:15:11 2026 -0800"
      },
      "message": "all: upgrade go directive to at least 1.25.0 [generated]\n\nBy now Go 1.26.0 has been released, and Go 1.24 is no longer supported\nper the Go Release Policy (see https://go.dev/doc/devel/release#policy).\n\nSee go.dev/doc/godebug#go-125 for GODEBUG changes relevant to Go 1.25.\n\nFor golang/go#69095.\n\n[git-generate]\n(cd . \u0026\u0026 go get go@1.25.0 \u0026\u0026 go mod tidy)\n\nChange-Id: I6a773ffcfbbce8cb96921ec8cb5fc384914efae9\nReviewed-on: https://go-review.googlesource.com/c/sync/+/744620\nAuto-Submit: Gopher Robot \u003cgobot@golang.org\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Junyang Shao \u003cshaojunyang@google.com\u003e\nReviewed-by: Michael Pratt \u003cmpratt@google.com\u003e\n"
    },
    {
      "commit": "2a180e22fddcc336475e72aa950be958c1b68d33",
      "tree": "4981880b813298cbba7e0a264c5893e333df058a",
      "parents": [
        "1966f539bbd7664efd5bb7462ae94d9db67f4502"
      ],
      "author": {
        "name": "Justin Mayhew",
        "email": "mayhew@live.ca",
        "time": "Wed Dec 03 08:48:14 2025 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Dec 03 16:24:39 2025 -0800"
      },
      "message": "errgroup: use consistent read for SetLimit panic\n\nThis could produce a confusing panic message if the second len(g.sem)\ncall returns 0. Avoid that by reading it once.\n\nChange-Id: Ibdb4963f90921bc20427b3f1e2de410638f6cb6b\nReviewed-on: https://go-review.googlesource.com/c/sync/+/726280\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Sean Liao \u003csean@liao.dev\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\n"
    },
    {
      "commit": "1966f539bbd7664efd5bb7462ae94d9db67f4502",
      "tree": "21b397589723a1e994353403426a64a032328568",
      "parents": [
        "04914c200cb38d4ea960ee6a4c314a028c632991"
      ],
      "author": {
        "name": "cuishuang",
        "email": "imcusg@gmail.com",
        "time": "Tue Oct 21 10:36:20 2025 +0800"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Tue Oct 21 10:44:11 2025 -0700"
      },
      "message": "errgroup: fix some typos in comment\n\nChange-Id: I3dd6df0eb2cc592f8811935cbcbca54a0d9304ce\nReviewed-on: https://go-review.googlesource.com/c/sync/+/713400\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: David Chase \u003cdrchase@google.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\n"
    },
    {
      "commit": "04914c200cb38d4ea960ee6a4c314a028c632991",
      "tree": "0e12acbf465b55b8e210a99151178f3e3a7bba11",
      "parents": [
        "7fad2c9213e0821bd78435a9c106806f2fc383f1"
      ],
      "author": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Aug 13 14:21:38 2025 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Aug 13 07:47:05 2025 -0700"
      },
      "message": "all: upgrade go directive to at least 1.24.0 [generated]\n\nBy now Go 1.25.0 has been released, and Go 1.23 is no longer supported\nper the Go Release Policy (see https://go.dev/doc/devel/release#policy).\n\nFor golang/go#69095.\n\n[git-generate]\n(cd . \u0026\u0026 go get go@1.24.0 \u0026\u0026 go mod tidy \u0026\u0026 go fix ./... \u0026\u0026 go mod edit -toolchain\u003dnone)\n\nChange-Id: Ifa2b9ecc1efe475dfe4d60f41fb3ad2c63896d12\nReviewed-on: https://go-review.googlesource.com/c/sync/+/695358\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nAuto-Submit: Gopher Robot \u003cgobot@golang.org\u003e\nReviewed-by: David Chase \u003cdrchase@google.com\u003e\n"
    },
    {
      "commit": "7fad2c9213e0821bd78435a9c106806f2fc383f1",
      "tree": "0042f91fa743e84134f5bf4062aa75db6e9acb75",
      "parents": [
        "8a14946fb031f4bf6096242b5e6ae6f7316d47d8"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Fri Jun 20 10:15:53 2025 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Jun 20 11:29:35 2025 -0700"
      },
      "message": "errgroup: revert propagation of panics\n\nThis change reverts CL 644575, which caused panics in the f()\ncall after group.Go(f) to be propagated to the subsequent\ngroup.Wait call. This caused more problems than it solved.\n\nAlso:\n- preserve some of the doc comment wording of Group.Go.\n- leave a \"tsunami stone\" comment in Group.Go.\n\nFixes golang/go#53757\nUpdates golang/go#74275\nUpdates golang/go#74304\nUpdates golang/go#74306\n\nChange-Id: I6e3992510944db7d69c72eaf241aedf8b84e62dd\nReviewed-on: https://go-review.googlesource.com/c/sync/+/682935\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: qiu laidongfeng2 \u003c2645477756@qq.com\u003e\nReviewed-by: Junyang Shao \u003cshaojunyang@google.com\u003e\nReviewed-by: Sean Liao \u003csean@liao.dev\u003e\nAuto-Submit: Sean Liao \u003csean@liao.dev\u003e\n"
    },
    {
      "commit": "8a14946fb031f4bf6096242b5e6ae6f7316d47d8",
      "tree": "917b6b22421917714e1573a7e3e1e6c06e53af82",
      "parents": [
        "1869c690bf11da5dd230e188d03a612a4a3f8ba6"
      ],
      "author": {
        "name": "xieyuschen",
        "email": "xieyuschen@gmail.com",
        "time": "Wed May 28 18:52:56 2025 +0800"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed May 28 08:13:15 2025 -0700"
      },
      "message": "errgroup: remove duplicated comment\n\nChange-Id: I5cdcc5034ccd87b939a406693e97485553ab60fa\nReviewed-on: https://go-review.googlesource.com/c/sync/+/676715\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "1869c690bf11da5dd230e188d03a612a4a3f8ba6",
      "tree": "4937d20784703e7e0fa0b8b6401a959d5a279fed",
      "parents": [
        "d1ac909e84c04f4326f620436b3894b3f5de0bd4"
      ],
      "author": {
        "name": "Iliya Lyan",
        "email": "68940374+12ya@users.noreply.github.com",
        "time": "Tue May 20 23:05:19 2025 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Sat May 24 08:27:25 2025 -0700"
      },
      "message": "all: replace deprecated ioutil\n\nChange-Id: I1beb9f5e759127a48c4e5ea0613a5a466886b7c5\nGitHub-Last-Rev: 58038b6cdd6f289eb1e35e44a7c60ad150be3a6f\nGitHub-Pull-Request: golang/sync#28\nReviewed-on: https://go-review.googlesource.com/c/sync/+/674815\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Sean Liao \u003csean@liao.dev\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\n"
    },
    {
      "commit": "d1ac909e84c04f4326f620436b3894b3f5de0bd4",
      "tree": "ca499e51ae637c8636b3ac679372bc5227904113",
      "parents": [
        "506c70f97318aa991ec5a898685660c880c166ca"
      ],
      "author": {
        "name": "qiulaidongfeng",
        "email": "2645477756@qq.com",
        "time": "Wed May 14 21:43:26 2025 +0800"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed May 14 16:54:08 2025 -0700"
      },
      "message": "sync/errgroup: PanicError.Error print stack trace\n\nBecause it is useful to print the stack\nwhen a nil pointer dereference occurs.\n\nFixes golang/go#73710\n\nChange-Id: I106ea0bdd70c2a293f5ea889edef9b5ba9db2fbd\nReviewed-on: https://go-review.googlesource.com/c/sync/+/672635\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\nAuto-Submit: Damien Neil \u003cdneil@google.com\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nTryBot-Bypass: Damien Neil \u003cdneil@google.com\u003e\n"
    },
    {
      "commit": "506c70f97318aa991ec5a898685660c880c166ca",
      "tree": "9cfc760ef7fc9a0883904a0382cca1d16b4ae488",
      "parents": [
        "396f3a06ea2a49eb410f12e244c0dd77095d0de9"
      ],
      "author": {
        "name": "qiulaidongfeng",
        "email": "2645477756@qq.com",
        "time": "Mon Jan 27 16:58:51 2025 +0800"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Mon Apr 07 09:20:50 2025 -0700"
      },
      "message": "errgroup: propagate panic and Goexit through Wait\n\nRecovered panic values are wrapped and saved in Group.\nGoexits are detected by a sentinel value set after the given function\nreturns normally. Wait propagates the first instance of a panic or\nGoexit.\n\nAccording to the runtime.Goexit after the code will not be executed,\nwith a bool, if f not call runtime.Goexit, is true,\ndetermine whether to propagate runtime.Goexit.\n\nFixes golang/go#53757\n\nChange-Id: Ic6426fc014fd1c4368ebaceef5b0d6163770a099\nReviewed-on: https://go-review.googlesource.com/c/sync/+/644575\nReviewed-by: Sean Liao \u003csean@liao.dev\u003e\nAuto-Submit: Alan Donovan \u003cadonovan@google.com\u003e\nCommit-Queue: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "396f3a06ea2a49eb410f12e244c0dd77095d0de9",
      "tree": "9af8ffd3dee19e1a4dac77d4229e21b08f761168",
      "parents": [
        "b637f27e40ad6e222f3d301cc113e635f0fa08be"
      ],
      "author": {
        "name": "Sean Liao",
        "email": "sean@liao.dev",
        "time": "Fri Mar 21 19:51:13 2025 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Apr 02 08:05:34 2025 -0700"
      },
      "message": "errgroup: document calling Go before Wait\n\nFixes golang/go#70284\n\nChange-Id: I31d60ea182226c032b0ffbddcbb5b53675dfd5e6\nReviewed-on: https://go-review.googlesource.com/c/sync/+/660075\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nAuto-Submit: Damien Neil \u003cdneil@google.com\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\n"
    },
    {
      "commit": "b637f27e40ad6e222f3d301cc113e635f0fa08be",
      "tree": "c434566a6ec36a7ad8f6bdd59e178516532116b2",
      "parents": [
        "960bf1fb13c616a491486fc6322e26fe0830eaf0"
      ],
      "author": {
        "name": "Ian Lance Taylor",
        "email": "iant@golang.org",
        "time": "Tue Mar 04 14:55:46 2025 -0800"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Tue Mar 04 15:33:19 2025 -0800"
      },
      "message": "errgroup: drop support for Go versions before 1.20\n\nChange-Id: I7de5dfae21c4ffe31d6c16e3df0fed3e2269cb16\nReviewed-on: https://go-review.googlesource.com/c/sync/+/654421\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nAuto-Submit: Ian Lance Taylor \u003ciant@google.com\u003e\nCommit-Queue: Ian Lance Taylor \u003ciant@google.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\n"
    },
    {
      "commit": "960bf1fb13c616a491486fc6322e26fe0830eaf0",
      "tree": "4344583e9a2bcf6f4f65981af03408311d398f9e",
      "parents": [
        "fe3591bd8a96873abc98bb9d2d5c62f27efca3e9"
      ],
      "author": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Feb 14 21:16:47 2025 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Feb 14 13:41:05 2025 -0800"
      },
      "message": "all: upgrade go directive to at least 1.23.0 [generated]\n\nBy now Go 1.24.0 has been released, and Go 1.22 is no longer supported\nper the Go Release Policy (https://go.dev/doc/devel/release#policy).\n\nFor golang/go#69095.\n\n[git-generate]\n(cd . \u0026\u0026 go get go@1.23.0 \u0026\u0026 go mod tidy \u0026\u0026 go fix ./... \u0026\u0026 go mod edit -toolchain\u003dnone)\n\nChange-Id: I7e3b1e073a0a64e82e2b9e49387d5da0afd9d58b\nReviewed-on: https://go-review.googlesource.com/c/sync/+/649835\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nReviewed-by: Cherry Mui \u003ccherryyz@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nAuto-Submit: Gopher Robot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "fe3591bd8a96873abc98bb9d2d5c62f27efca3e9",
      "tree": "2568876928e5d2458b07069096b2fa30bbde4782",
      "parents": [
        "913fb63af28f446cd10c684ee847b5606cf328f7"
      ],
      "author": {
        "name": "berbreik",
        "email": "berbreik@gmail.com",
        "time": "Sat Jan 11 04:45:34 2025 +0530"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Jan 17 07:49:37 2025 -0800"
      },
      "message": "sync/errgroup: improve documentation for semaphore limit behavior\n\nUpdated the documentation for `SetLimit` and `Go` functions in the\n`errgroup` package. the note clarifies the behavior when the semaphore\nlimit is set to zero, which could lead to a deadlock if not handled\nproperly. the updated documentation warns users to set a positive\nsemaphore limit to avoid blocking goroutines and potential deadlock\n\nthis change improves the clarity of API and helps users understand how\nto properly use the semaphore limit to prevent issues in concurrent\nexecution\n\nChange-Id: Ie62acc38ef804b3590c04bddba00a3cce21e8cef\nReviewed-on: https://go-review.googlesource.com/c/sync/+/642215\nReviewed-by: Michael Knyszek \u003cmknyszek@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nAuto-Submit: Ian Lance Taylor \u003ciant@google.com\u003e\n"
    },
    {
      "commit": "913fb63af28f446cd10c684ee847b5606cf328f7",
      "tree": "4ccafcbeab633bc3999f38f38979925f5f3045ce",
      "parents": [
        "151027eb5637d626749783009eab9f0a7cfb446a"
      ],
      "author": {
        "name": "catatsuy",
        "email": "m.ddotx.f@gmail.com",
        "time": "Sat Nov 09 14:08:05 2024 +0900"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Nov 13 01:18:28 2024 +0000"
      },
      "message": "singleflight: fix typo in singleflight_test.go\n\nChange-Id: Ia2160fdc8f1938d784a4e1595151c00bc521f5c3\nReviewed-on: https://go-review.googlesource.com/c/sync/+/626795\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nAuto-Submit: Ian Lance Taylor \u003ciant@google.com\u003e\nRun-TryBot: Emmanuel Odeke \u003cemmanuel@orijtech.com\u003e\nCommit-Queue: Ian Lance Taylor \u003ciant@google.com\u003e\nReviewed-by: Emmanuel Odeke \u003cemmanuel@orijtech.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nAuto-Submit: Emmanuel Odeke \u003cemmanuel@orijtech.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Cherry Mui \u003ccherryyz@google.com\u003e\n"
    },
    {
      "commit": "151027eb5637d626749783009eab9f0a7cfb446a",
      "tree": "1885693bcce7055eab50f79426e28f0343577ad2",
      "parents": [
        "411f99ef121375a146e962b6eab78b03b7429483"
      ],
      "author": {
        "name": "Ian Lance Taylor",
        "email": "iant@golang.org",
        "time": "Thu Oct 31 15:41:32 2024 -0700"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Nov 01 00:46:18 2024 +0000"
      },
      "message": "README: don\u0027t recommend go get\n\nThese days people will just import the packages and the go tool will\ndo the right thing. We don\u0027t need to explain it.\n\nAdd a pointer to the git repo, though.\n\nFor golang/go#62645\n\nChange-Id: Icbe33e05f96e1b32f6fcc99fb5fb0b2ecb213a08\nReviewed-on: https://go-review.googlesource.com/c/sync/+/623820\nCommit-Queue: Ian Lance Taylor \u003ciant@google.com\u003e\nAuto-Submit: Ian Lance Taylor \u003ciant@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\n"
    },
    {
      "commit": "411f99ef121375a146e962b6eab78b03b7429483",
      "tree": "f254f8439dce3303783e3887ff87d18b706dcfd7",
      "parents": [
        "14be23e5b48bec28285f8a694875175ecacfddb3"
      ],
      "author": {
        "name": "Russ Cox",
        "email": "rsc@golang.org",
        "time": "Tue Jul 16 11:35:24 2024 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Tue Jul 16 16:06:58 2024 +0000"
      },
      "message": "LICENSE: update per Google Legal\n\nVery minor tweaks:\n - Remove (c) pseudosymbol.\n - Remove \"All Rights Reserved.\"\n - Change \"Google Inc.\" (no longer exists) to \"Google LLC\".\n\n[git-generate]\necho \u0027\n,s/\\(c\\) //\n,s/ All rights reserved.//\n,s/Google Inc./Google LLC/\nw\nq\n\u0027 | sam -d LICENSE\n\nChange-Id: Ifc1b84adca131018a48ba47e741a682a0ed9bb49\nReviewed-on: https://go-review.googlesource.com/c/sync/+/598584\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nAuto-Submit: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "14be23e5b48bec28285f8a694875175ecacfddb3",
      "tree": "8fca0476a97c50078d2dd2425b398ef0523bbfa4",
      "parents": [
        "59c1ca1e4661ed4452be4069ceea3c233f4deec1"
      ],
      "author": {
        "name": "Branden Brown",
        "email": "zephyrtronium@gmail.com",
        "time": "Wed Oct 18 12:56:12 2023 -0500"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Mon Mar 04 17:26:02 2024 +0000"
      },
      "message": "semaphore: cancel acquisition with a done context\n\nWhen acquiring from a semaphore could proceed without contention, the\nprevious behavior was to always do so, even when the provided context\nwas done. This was the documented behavior, but it could lead to\nconfusion. It isn\u0027t much more expensive to check the context error, so\ncancel acquisition if it\u0027s done.\n\nFixes golang/go#63615.\n\ngoos: linux\ngoarch: amd64\npkg: golang.org/x/sync/semaphore\ncpu: 12th Gen Intel(R) Core(TM) i5-1235U\n                                        │  old.bench  │             new.bench              │\n                                        │   sec/op    │   sec/op     vs base               │\nAcquireSeq/Weighted-acquire-1-1-1-12      26.45n ± 2%   27.25n ± 3%  +3.04% (p\u003d0.001 n\u003d20)\nAcquireSeq/Weighted-acquire-2-1-1-12      26.96n ± 1%   27.12n ± 1%       ~ (p\u003d0.104 n\u003d20)\nAcquireSeq/Weighted-acquire-16-1-1-12     26.07n ± 3%   27.48n ± 1%  +5.45% (p\u003d0.000 n\u003d20)\nAcquireSeq/Weighted-acquire-128-1-1-12    26.19n ± 2%   27.24n ± 1%  +4.01% (p\u003d0.000 n\u003d20)\nAcquireSeq/Weighted-acquire-2-2-1-12      25.61n ± 1%   25.99n ± 2%       ~ (p\u003d0.066 n\u003d20)\nAcquireSeq/Weighted-acquire-16-2-8-12     209.6n ± 2%   211.0n ± 3%       ~ (p\u003d0.280 n\u003d20)\nAcquireSeq/Weighted-acquire-128-2-64-12   1.669µ ± 1%   1.721µ ± 2%  +3.09% (p\u003d0.000 n\u003d20)\nAcquireSeq/Weighted-acquire-2-1-2-12      51.08n ± 1%   53.03n ± 2%  +3.82% (p\u003d0.000 n\u003d20)\nAcquireSeq/Weighted-acquire-16-8-2-12     52.48n ± 2%   53.66n ± 2%  +2.26% (p\u003d0.028 n\u003d20)\nAcquireSeq/Weighted-acquire-128-64-2-12   52.27n ± 1%   53.71n ± 2%  +2.75% (p\u003d0.000 n\u003d20)\ngeomean                                   60.06n        61.69n       +2.71%\n\nChange-Id: I0ae1a0bb6c027461ac1a9ee71c51efd8427ab308\nReviewed-on: https://go-review.googlesource.com/c/sync/+/536275\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Michael Knyszek \u003cmknyszek@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "59c1ca1e4661ed4452be4069ceea3c233f4deec1",
      "tree": "29a471952d46a2955a2a00b2ad814150ca1136eb",
      "parents": [
        "10739b037d369c748d671b216356d7e04ce68da1"
      ],
      "author": {
        "name": "Olivier Mengué",
        "email": "olivier.mengue@gmail.com",
        "time": "Sat Oct 28 18:17:38 2023 +0200"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Thu Dec 07 16:58:19 2023 +0000"
      },
      "message": "errgroup: add reference to sync.WaitGroup\n\nAdd doc link to sync.WaitGroup in the package documentation.\n\nRationale:\nThe reference to sync.WaitGroup might be obvious to the authors of this\npackage, but it wasn\u0027t to me, so despites I had seen this package\nmultiple times I had never made the link to sync.WaitGroup. So when\nplaying with WaitGroup I was missing remembering about errgroup.\nIn hope this will help others as well as my future self.\n\nChange-Id: I2c56976958ad9ab94c1596c96fa86c00dd73d2fb\nReviewed-on: https://go-review.googlesource.com/c/sync/+/538335\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Carlos Amedee \u003ccarlos@golang.org\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "10739b037d369c748d671b216356d7e04ce68da1",
      "tree": "d1a93a9bc81638644aedc423a10300ee0842ad54",
      "parents": [
        "22ba2078e183beec12908ea94f1d899c53dbf02c"
      ],
      "author": {
        "name": "Dmitri Shuralyov",
        "email": "dmitshur@golang.org",
        "time": "Tue Oct 10 19:30:18 2023 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Oct 11 14:04:17 2023 +0000"
      },
      "message": "all: update go directive to 1.18\n\nDone with:\n\ngo get go@1.18\ngo mod tidy\ngo fix ./...\n\nUsing go1.21.3.\n\nWhile here, simplify package syncmap by taking advantage of knowing\nthat all supported Go versions will have the go1.9 build constraint\nsatisfied.\n\nFor golang/go#60268.\n\nChange-Id: Ic0f24ab13ada6839573e55beee5516c1a6c7f3cc\nReviewed-on: https://go-review.googlesource.com/c/sync/+/534220\nAuto-Submit: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\n"
    },
    {
      "commit": "22ba2078e183beec12908ea94f1d899c53dbf02c",
      "tree": "f7c7f04014a0a6f019c18db1b71e65573a455461",
      "parents": [
        "93782cc822b6b554cb7df40332fd010f0473cbc8"
      ],
      "author": {
        "name": "Eric Wohltman",
        "email": "eric.wohltman@gmail.com",
        "time": "Thu Sep 07 12:51:47 2023 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Tue Sep 26 16:46:49 2023 +0000"
      },
      "message": "singleflight: add panicError.Unwrap method\n\nCurrently when singleflight recovers from a panic, it wraps it with the private\nerror type panicError. This change adds an `Unwrap` method to panicError to\nallow wrapped errors to be returned.\n\nUpdates golang/go#62511\n\nChange-Id: Ia510ad7d5881207ef71f9eb89c1766835af19b6b\nReviewed-on: https://go-review.googlesource.com/c/sync/+/526171\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Than McIntosh \u003cthanm@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "93782cc822b6b554cb7df40332fd010f0473cbc8",
      "tree": "17151adeed240f268b58d84c693e5155a24e70c8",
      "parents": [
        "4966af63bb0cd2fe6d8cf9198904d30401b05fbd"
      ],
      "author": {
        "name": "Jon Johnson",
        "email": "jon.johnson@chainguard.dev",
        "time": "Fri Mar 31 15:58:22 2023 -0700"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Thu Jun 01 20:35:10 2023 +0000"
      },
      "message": "errgroup: use WithCancelCause to cancel context\n\nFixes golang/go#59355\n\nChange-Id: Ib6a88e7e5fefe7b0d5672035af16d109aabcbf1e\nReviewed-on: https://go-review.googlesource.com/c/sync/+/481255\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Ian Lance Taylor \u003ciant@golang.org\u003e\nReviewed-by: Michael Knyszek \u003cmknyszek@google.com\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "4966af63bb0cd2fe6d8cf9198904d30401b05fbd",
      "tree": "d08e5def71215d1facf00f8c03ecc97ed24e0b05",
      "parents": [
        "a6666c150eb9762365996ad2f3a8c35b0818d7bb"
      ],
      "author": {
        "name": "Sean Liao",
        "email": "sean@liao.dev",
        "time": "Fri May 19 20:29:37 2023 +0100"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Tue May 23 18:54:36 2023 +0000"
      },
      "message": "singleflight: example for using Group\n\nFixes golang/go#60208\n\nChange-Id: I422a45c0f139ba47045f47cec1c96d300a2a424f\nReviewed-on: https://go-review.googlesource.com/c/sync/+/496535\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "a6666c150eb9762365996ad2f3a8c35b0818d7bb",
      "tree": "960df1d7a939ae96c8365b188b332bc7c4c19b11",
      "parents": [
        "1ea32573ddff2d374504dcc8102328ea790af85f"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Sun May 02 09:19:41 2021 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed May 17 13:21:07 2023 +0000"
      },
      "message": "go.mod: upgrade to go 1.17\n\nThis change was produced using \u0027go mod tidy -go\u003d1.17\u0027\nwith a go command built at CL 315210.\n\nThis activates lazy loading, and updates the go.mod file to maintain\nthe lazy-loading invariants (namely, including an explicit requirement\nfor every package transitively imported by the main module).\n\nNote that this does *not* prevent users with earlier go versions from\nsuccessfully building packages from this module.\n\nFor golang/go#36460.\n\nChange-Id: Idb3d8d056d41bb254d0b5d9b2699ac33a51081f3\nReviewed-on: https://go-review.googlesource.com/c/sync/+/316130\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nCommit-Queue: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "1ea32573ddff2d374504dcc8102328ea790af85f",
      "tree": "04caea4c5372035f3879c56852405a6336b35a16",
      "parents": [
        "8fcdb60fdcc0539c5e357b2308249e4e752147f1"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Apr 19 10:43:56 2023 -0400"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Apr 19 16:11:59 2023 +0000"
      },
      "message": "singleflight: make the check for exec support in TestPanicDoChan platform-agnostic\n\nThe new wasip1 GOOS does not support exec, but some ios environments\n(like Corellium) might. Update the test to exec itself with -test.list\nas a control case.\n\nFor golang/go#58141.\n\nChange-Id: Id69950fc394910620f6c73cb437ca75c09ad8c29\nReviewed-on: https://go-review.googlesource.com/c/sync/+/485980\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nCommit-Queue: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Johan Brandhorst-Satzkorn \u003cjohan.brandhorst@gmail.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\n"
    },
    {
      "commit": "8fcdb60fdcc0539c5e357b2308249e4e752147f1",
      "tree": "d386e51a672a47e5c2fca164501a42ef9b49e811",
      "parents": [
        "7f9b1623fab7a8a3d219f2a4db1b2fe98fadafea"
      ],
      "author": {
        "name": "Cuong Manh Le",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Thu Sep 29 11:59:30 2022 +0700"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Thu Sep 29 20:41:14 2022 +0000"
      },
      "message": "singleflight: avoid race between multiple Do calls\n\nThis is port of CL 436437, but without the test. ForgotUnshared has not\nbeen ported here yet.\n\nChange-Id: Id54d0c41d1a7948bf008e458c44b21670ada81e4\nReviewed-on: https://go-review.googlesource.com/c/sync/+/436495\nRun-TryBot: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nAuto-Submit: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@google.com\u003e\n"
    },
    {
      "commit": "7f9b1623fab7a8a3d219f2a4db1b2fe98fadafea",
      "tree": "f89c9dc672fb5878971a288d56a9a1799a58d7d0",
      "parents": [
        "f12130a5280420d36872ab0a7717d160c768df46"
      ],
      "author": {
        "name": "Cuong Manh Le",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Fri Sep 23 22:38:11 2022 +0700"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Sep 23 20:29:41 2022 +0000"
      },
      "message": "singleflight: remove forgotten field\n\nPort from CL 433315.\n\nChange-Id: Iaf6ab4676dd10a73443c3c9981ffc77233b4631c\nReviewed-on: https://go-review.googlesource.com/c/sync/+/433555\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nAuto-Submit: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nReviewed-by: Cherry Mui \u003ccherryyz@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "f12130a5280420d36872ab0a7717d160c768df46",
      "tree": "d559a6df4f4c5b9ace5a74a1e136ffe484c60991",
      "parents": [
        "7fc1605a5dde7535a0fc1770ca44238629ff29ac"
      ],
      "author": {
        "name": "cui fliter",
        "email": "imcusg@gmail.com",
        "time": "Wed Sep 07 13:28:43 2022 +0000"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Wed Sep 07 14:00:24 2022 +0000"
      },
      "message": "syncmap: remove redundant type conversion\n\nChange-Id: I32c367338e1ea95aaaaa8e891f5dfe4ab6c03913\nGitHub-Last-Rev: a2b25df29ad89452b484bda107a0834d79f09310\nGitHub-Pull-Request: golang/sync#18\nReviewed-on: https://go-review.googlesource.com/c/sync/+/429058\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Michael Knyszek \u003cmknyszek@google.com\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "7fc1605a5dde7535a0fc1770ca44238629ff29ac",
      "tree": "44a59d46ae2090f37c8add2f9cc1f52b0896925b",
      "parents": [
        "886fb9371eb4b47af10bff9c8025a8c9e1554b92"
      ],
      "author": {
        "name": "Anderson Queiroz",
        "email": "me@andersonq.me",
        "time": "Wed Aug 17 22:09:24 2022 +0100"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri Aug 19 03:09:29 2022 +0000"
      },
      "message": "x/sync/errgroup: clarify docs for Go\n\nEven thought Go cancels the context in g, if it\u0027s not nil, it\u0027ll call\nany subsequent function, regardless if a previous call of f returned an error or not.\n\nFixes golang/go#54045\n\nChange-Id: Ie6059925f45458cf393bf1fc8949ce16be8e6f2a\nReviewed-on: https://go-review.googlesource.com/c/sync/+/424634\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@google.com\u003e\n"
    },
    {
      "commit": "886fb9371eb4b47af10bff9c8025a8c9e1554b92",
      "tree": "a6fb9bd0dcdbb7e27fa0f88200c07315b3abf75a",
      "parents": [
        "0de741cfad7ff3874b219dfbc1b9195b58c7c490"
      ],
      "author": {
        "name": "Russ Cox",
        "email": "rsc@golang.org",
        "time": "Fri Jul 22 11:11:00 2022 -0400"
      },
      "committer": {
        "name": "Russ Cox",
        "email": "rsc@golang.org",
        "time": "Fri Jul 22 15:52:55 2022 +0000"
      },
      "message": "A+C: delete AUTHORS and CONTRIBUTORS\n\nIn 2009, Google\u0027s open-source lawyers asked us to create the AUTHORS\nfile to define \"The Go Authors\", and the CONTRIBUTORS file was in\nkeeping with open source best practices of the time.\n\nRe-reviewing our repos now in 2022, the open-source lawyers are\ncomfortable with source control history taking the place of the\nAUTHORS file, and most open source projects no longer maintain\nCONTRIBUTORS files.\n\nTo ease maintenance, remove AUTHORS and CONTRIBUTORS from all repos.\n\nFor golang/go#53961.\n\nChange-Id: I182181f0c116a7218ad9aba1c7a645fe0190762a\nReviewed-on: https://go-review.googlesource.com/c/sync/+/418922\nReviewed-by: David Chase \u003cdrchase@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nRun-TryBot: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "0de741cfad7ff3874b219dfbc1b9195b58c7c490",
      "tree": "bebc4c5b68efed5bce8e63ece31c6c237baf7efa",
      "parents": [
        "0976fa681c295de5355f7a4d968b56cb9da8a76b"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Wed Jun 01 08:18:39 2022 -0600"
      },
      "committer": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Wed Jun 01 15:02:17 2022 +0000"
      },
      "message": "x/sync/errgroup: make note of the default errgroup goroutine limit (unlimited)\n\nChange-Id: I1926e6faf821a7adb6c1365d18432abb0f856367\nReviewed-on: https://go-review.googlesource.com/c/sync/+/409774\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Changkun Ou \u003cmail@changkun.de\u003e\nRun-TryBot: Changkun Ou \u003cmail@changkun.de\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "0976fa681c295de5355f7a4d968b56cb9da8a76b",
      "tree": "9f42a816b87ed1891c276f76c87cfb6a673804e4",
      "parents": [
        "036812b2e83c0ddf193dd5a34e034151da389d09"
      ],
      "author": {
        "name": "Changkun Ou",
        "email": "hi@changkun.de",
        "time": "Sat May 07 17:30:52 2022 +0200"
      },
      "committer": {
        "name": "Gopher Robot",
        "email": "gobot@golang.org",
        "time": "Fri May 13 21:05:16 2022 +0000"
      },
      "message": "x/sync/errgroup: add TryGo and SetLimit to control concurrency\n\nThis benchmark shows the difference between two implementations.\nUsing explicit waiter with mutex (old, before PS3) or channel (new,\nsince PS4). There is no significant difference at a measure:\n\nname  old time/op    new time/op    delta\nGo-8     247ns ±10%     245ns ±10%     ~     (p\u003d0.571 n\u003d5+10)\n\nname  old alloc/op   new alloc/op   delta\nGo-8     48.0B ± 0%     40.0B ± 0%  -16.67%  (p\u003d0.000 n\u003d5+10)\n\nname  old allocs/op  new allocs/op  delta\nGo-8      2.00 ± 0%      2.00 ± 0%     ~     (all equal)\n\nFixes golang/go#27837\n\nChange-Id: I60247f1a2a1cdce2b180f10b409e37de8b82341e\nReviewed-on: https://go-review.googlesource.com/c/sync/+/405174\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Heschi Kreinick \u003cheschi@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nRun-TryBot: Changkun Ou \u003cmail@changkun.de\u003e\nAuto-Submit: Bryan Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "036812b2e83c0ddf193dd5a34e034151da389d09",
      "tree": "e3cb141aaca7556aec1921a4c29aad53c15febb1",
      "parents": [
        "09787c993a3ab68e3d1f5c9b2394ab9433f391be"
      ],
      "author": {
        "name": "Russ Cox",
        "email": "rsc@golang.org",
        "time": "Fri Feb 19 18:54:43 2021 -0500"
      },
      "committer": {
        "name": "Russ Cox",
        "email": "rsc@golang.org",
        "time": "Sat Feb 20 03:29:51 2021 +0000"
      },
      "message": "all: go fmt ./...\n\nMake all our package sources use Go 1.17 gofmt format\n(adding //go:build lines).\n\nNot strictly necessary but will avoid spurious changes\nas files are edited.\n\nPart of //go:build change (#41184).\nSee https://golang.org/design/draft-gobuild\n\nChange-Id: Ie3f0a5f80ab53b95a25db9ccfd9a3cc4ea7ff465\nReviewed-on: https://go-review.googlesource.com/c/sync/+/294370\nTrust: Russ Cox \u003crsc@golang.org\u003e\nRun-TryBot: Russ Cox \u003crsc@golang.org\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Jason A. Donenfeld \u003cJason@zx2c4.com\u003e\nReviewed-by: Robert Griesemer \u003cgri@golang.org\u003e\n"
    },
    {
      "commit": "09787c993a3ab68e3d1f5c9b2394ab9433f391be",
      "tree": "cd81efed7ba1d6cf2c54cd621de607c30a5baeef",
      "parents": [
        "67f06af15bc961c363a7260195bcd53487529a21"
      ],
      "author": {
        "name": "Julie Qiu",
        "email": "julie@golang.org",
        "time": "Mon Dec 07 17:48:14 2020 -0500"
      },
      "committer": {
        "name": "Julie Qiu",
        "email": "julie@golang.org",
        "time": "Mon Dec 07 23:25:20 2020 +0000"
      },
      "message": "README.md: add badge to pkg.go.dev\n\nChange-Id: I4ea3e103c290e5d713a791178b35a41509e87275\nReviewed-on: https://go-review.googlesource.com/c/sync/+/275934\nTrust: Julie Qiu \u003cjulie@golang.org\u003e\nRun-TryBot: Julie Qiu \u003cjulie@golang.org\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\n"
    },
    {
      "commit": "67f06af15bc961c363a7260195bcd53487529a21",
      "tree": "b8d57aa3881802e77fe46c004ca555a73d4437b0",
      "parents": [
        "b3e1573b75205f2905c4b27986413d2e2be9803c"
      ],
      "author": {
        "name": "Cuong Manh Le",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Tue Oct 20 20:53:02 2020 +0700"
      },
      "committer": {
        "name": "Cuong Manh Le",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Tue Oct 20 16:03:32 2020 +0000"
      },
      "message": "singleflight: fix flaky TestForget\n\nThere can be a race condition in current TestForget, that said when\n\"close(secondCh)\" is executed, the second goroutine will be finished\nimmediately, causing the third \"g.Do\" is evaluated.\n\nTo fix this, we change to use \"g.DoChan\" for both second and third. In\nsecond, we block to make sure it\u0027s still running at the time we call\nthird. after then we unblock second and verify the result.\n\nFixes golang/go#42092\n\nChange-Id: I980fdf109a531e2b7a74c8149b4fcaa338775e08\nReviewed-on: https://go-review.googlesource.com/c/sync/+/263877\nTrust: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nRun-TryBot: Cuong Manh Le \u003ccuong.manhle.vn@gmail.com\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "b3e1573b75205f2905c4b27986413d2e2be9803c",
      "tree": "4e70aa8d15da28f7801c3831c6fff5657cf38622",
      "parents": [
        "30421366ff761c80b137fb5084b32278ed41fab0"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Oct 08 09:52:58 2020 -0400"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Oct 08 14:14:35 2020 +0000"
      },
      "message": "singleflight: skip tests involving exec on js/wasm\n\nThe js port does not yet support os/exec.\n\nUpdates golang/go#37100\nUpdates golang/go#33519\n\nChange-Id: I9608b7febfdc274dc1b9f34a92d00ef7bea4e13c\nReviewed-on: https://go-review.googlesource.com/c/sync/+/260717\nTrust: Bryan C. Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\n"
    },
    {
      "commit": "30421366ff761c80b137fb5084b32278ed41fab0",
      "tree": "6644373ae4379f9942d2d2fa35546eaf0e7fb90f",
      "parents": [
        "6e8e738ad208923de99951fe0b48239bfd864f28"
      ],
      "author": {
        "name": "hanliang.kirk",
        "email": "kirk91.han@gmail.com",
        "time": "Sun Aug 30 12:01:04 2020 +0800"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Sep 30 13:27:11 2020 +0000"
      },
      "message": "singleflight: fix hangs after first Do panic\n\nWhen first Do panic, the related wait group will never be done,\nand all the subsequent calls would block on the same wait group forever.\n\nFixes golang/go#41133\n\nChange-Id: I0ad9bfb387b6133b10766a34fc0040f200eae27e\nReviewed-on: https://go-review.googlesource.com/c/sync/+/251677\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Go Bot \u003cgobot@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\nTrust: Ian Lance Taylor \u003ciant@golang.org\u003e\nTrust: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "6e8e738ad208923de99951fe0b48239bfd864f28",
      "tree": "8e702d3cfa355e6694cbf48662bf9ccd610fadd1",
      "parents": [
        "43a5402ce75a95522677f77c619865d66b8c57ab"
      ],
      "author": {
        "name": "Cholerae Hu",
        "email": "choleraehyq@gmail.com",
        "time": "Thu Jun 04 15:59:01 2020 +0800"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Jun 25 20:38:02 2020 +0000"
      },
      "message": "errgroup: fix go vet \"copy lock value\" warning\n\nChange-Id: I55256db02fe52ced96fe394574b81ced090999fe\nReviewed-on: https://go-review.googlesource.com/c/sync/+/236477\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "43a5402ce75a95522677f77c619865d66b8c57ab",
      "tree": "0b1ec05e469fc2098a516643847d609b15aaeb9a",
      "parents": [
        "cd5d95a43a6e21273425c7ae415d3df9ea832eeb"
      ],
      "author": {
        "name": "徐志强",
        "email": "652732310@qq.com",
        "time": "Tue Mar 17 01:21:48 2020 +0000"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Tue Mar 17 01:50:54 2020 +0000"
      },
      "message": "semaphore: unblock waiters when the front waiter cancels\n\nWhen `Release`, if the remaining tokens are not enough for the front waiter, no waiters will be notified.\n\nSo if the canceled waiter is the front one, it should try to notify following waiters if there are remaining tokens.\n\nI found this bug when implementing a cancelable rwmutex based on semaphore:\n\nhttps://github.com/zhiqiangxu/util/blob/master/mutex/crwmutex.go\n\nThis bug can be verified by this test:\n\nhttps://github.com/zhiqiangxu/util/blob/master/mutex/crwmutex_test.go#L43\n\nChange-Id: Id8564976bd375a82c4fbc6cb08b0bb83118a346c\nGitHub-Last-Rev: 29b6ff26bf779d23239cfe64a395378a9e41d1fc\nGitHub-Pull-Request: golang/sync#10\nReviewed-on: https://go-review.googlesource.com/c/sync/+/223418\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "cd5d95a43a6e21273425c7ae415d3df9ea832eeb",
      "tree": "8c997bcba93dc06939deaf64c87ac6041c9d4dd0",
      "parents": [
        "112230192c580c3556b8cee6403af37a4fc5f28c"
      ],
      "author": {
        "name": "Eric Rutherford",
        "email": "erutherford@gmail.com",
        "time": "Fri Aug 30 18:09:31 2019 -0500"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Sep 11 18:51:00 2019 +0000"
      },
      "message": "syncmap: use type alias for Map\n\nsync.Map was introduced in Go 1.9, this change updates the syncmap package to use a type alias\nto sync.Map for 1.9 and later. It also updates the comments to reflect this change.\n\nFixes golang/go#33867\n\nChange-Id: Ia58ad2bc409f8fcb8a7539ef165148315da5cfb1\nReviewed-on: https://go-review.googlesource.com/c/sync/+/192737\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "112230192c580c3556b8cee6403af37a4fc5f28c",
      "tree": "ec228883925e61255191c53ce6d4a7f543800a7e",
      "parents": [
        "56d357773e8497dfd526f0727e187720d1093757"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Mon Apr 22 16:11:18 2019 -0600"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Apr 23 02:48:10 2019 +0000"
      },
      "message": "semaphore: better error message when releasing more than held\n\nChange-Id: Ibe69007b2d7565a33d9e64ae51142478f495509a\nReviewed-on: https://go-review.googlesource.com/c/sync/+/173377\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "56d357773e8497dfd526f0727e187720d1093757",
      "tree": "06fcca271037d34aa2338d69647c8dd2c233e20e",
      "parents": [
        "e225da77a7e68af35c70ccbf71af2b83e6acac3c"
      ],
      "author": {
        "name": "LE Manh Cuong",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Fri Apr 12 11:58:03 2019 +0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Fri Apr 12 18:36:30 2019 +0000"
      },
      "message": "singleflight: fix duplicate deleting key when Forget called\n\nWhen Forget was called, we delete key associated with current call from\nmap. When that call is done, it does delete key again, causing the same\nkey set by other call after Forget lost.\n\nTo fix it, adding a boolean value to check whether the call is forgotten,\nthe call only does delete key if Forget is not called.\n\nFixes golang/go#31420\n\nChange-Id: I9708352ca3ff76c77f659916b37a496fdeb480d2\nReviewed-on: https://go-review.googlesource.com/c/sync/+/171897\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "e225da77a7e68af35c70ccbf71af2b83e6acac3c",
      "tree": "e4729578d805ff41e52a646fb99c7cd95e2cefb2",
      "parents": [
        "37e7f081c4d4c64e13b10787722085407fe5d15f"
      ],
      "author": {
        "name": "Michael Matloob",
        "email": "matloob@golang.org",
        "time": "Fri Feb 15 17:36:53 2019 -0500"
      },
      "committer": {
        "name": "Michael Matloob",
        "email": "matloob@golang.org",
        "time": "Wed Feb 27 15:59:43 2019 +0000"
      },
      "message": "all: add a go.mod file\n\nThis change adds a go.mod file to this repo, following the\nrequirements stated in bcmills\u0027s comment here:\nhttps://golang.org/issue/28136#issuecomment-462971974. It\u0027s\nimportant to note that we will not be\nadding versions to the repo for now.\n\nThis change does not add a go.sum because this repo has no dependencies.\n\nThe change was generated by running \"go mod init\" and \"go mod tidy\" using Go\n1.11.5 in the top-level directory of the repository.\n\nUpdates golang/go#28136\n\nChange-Id: Ie4f1270a0dfefd4239badf86daa0d7a5b17fd0d5\nReviewed-on: https://go-review.googlesource.com/c/162823\nRun-TryBot: Michael Matloob \u003cmatloob@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "37e7f081c4d4c64e13b10787722085407fe5d15f",
      "tree": "e31c725c8b45e0a16146035be5838dee2acf9dd7",
      "parents": [
        "42b317875d0fa942474b76e1b46a6060d720ae6e"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Mon Sep 24 11:15:43 2018 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Fri Dec 21 19:32:16 2018 +0000"
      },
      "message": "semaphore: add more Acquire documentation\n\nChange-Id: Ie64db438145a307ec8aef8fd412d445a2fe74d40\nReviewed-on: https://go-review.googlesource.com/c/136995\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "42b317875d0fa942474b76e1b46a6060d720ae6e",
      "tree": "0a707334e7c2b1fd06764301493a3d2a17f0097f",
      "parents": [
        "1d60e4601c6fd243af51cc01ddf169918a5407ca"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Wed Nov 07 16:20:06 2018 -0800"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Thu Nov 08 01:04:31 2018 +0000"
      },
      "message": "all: remove x/net/context in favour of context\n\nChange-Id: Idbfe40e7cb9f99ca3dc7d4c214de6b9e028eefb7\nReviewed-on: https://go-review.googlesource.com/c/148277\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "1d60e4601c6fd243af51cc01ddf169918a5407ca",
      "tree": "60632ff83cf1e2c137e36c8f4a0581f2cfeb13e4",
      "parents": [
        "fd80eb99c8f653c847d294a001bdf2a3a6f768f5"
      ],
      "author": {
        "name": "Andrew Bonventre",
        "email": "andybons@golang.org",
        "time": "Wed Mar 14 13:21:19 2018 -0400"
      },
      "committer": {
        "name": "Andrew Bonventre",
        "email": "andybons@golang.org",
        "time": "Wed Mar 14 18:01:46 2018 +0000"
      },
      "message": "CONTRIBUTING.md: remove note about not accepting Pull Requests\n\nUpdates golang/go#24185\n\nChange-Id: I892f30f02f9ae40554790e9c177cb79d193bffd5\nReviewed-on: https://go-review.googlesource.com/100696\nReviewed-by: Andrew Bonventre \u003candybons@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\n"
    },
    {
      "commit": "fd80eb99c8f653c847d294a001bdf2a3a6f768f5",
      "tree": "c8c31ae6a61f1327cdaa14f00685fb9708454466",
      "parents": [
        "8e0aa688b654ef28caa72506fa5ec8dba9fc7690"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Nov 01 15:49:15 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Nov 01 21:47:15 2017 +0000"
      },
      "message": "semaphore: add worker-pool example\n\nI\u0027ve commented several times in various forums that basically every\ntime I\u0027ve seen the “worker goroutine” pattern in Go, there has turned\nout to be a cleaner implementation using semaphores.\n\nThis change adds a simple such example. (For more complex usage, I\nwould generally pair the semaphore with an errgroup.Group.)\n\nChange-Id: Ibf69ee761d14ba59c1acc6a2d595b4fcf0d8f6d6\nReviewed-on: https://go-review.googlesource.com/75170\nReviewed-by: Ross Light \u003clight@google.com\u003e\n"
    },
    {
      "commit": "8e0aa688b654ef28caa72506fa5ec8dba9fc7690",
      "tree": "008050dfa1ddbc32e6a0709da03fb9ca8686e2d2",
      "parents": [
        "f52d1811a62927559de87708c8913c1650ce4f26"
      ],
      "author": {
        "name": "Kevin Burke",
        "email": "kev@inburke.com",
        "time": "Tue Jul 18 20:38:01 2017 -0700"
      },
      "committer": {
        "name": "Kevin Burke",
        "email": "kev@inburke.com",
        "time": "Wed Sep 27 05:41:12 2017 +0000"
      },
      "message": "README: switch to Markdown, add better links\n\nMove the README to README.md so Gerrit can render it; currently\nGerrit only renders files named exactly \"README.md\" (for example at\nhttps://go.googlesource.com/go).\n\nAdd more links to the README explaining how to file issues,\nhow to submit code changes, where to download the code to and\nhow to get it. Hopefully this should help people who go to\nhttps://go.googlesource.com/sync or https://github.com/golang/sync\nfigure out how to get started with development.\n\nChange-Id: Iafdbec407bd6f61459aabe6e2c4703132d038b69\nReviewed-on: https://go-review.googlesource.com/49872\nReviewed-by: Kevin Burke \u003ckev@inburke.com\u003e\n"
    },
    {
      "commit": "f52d1811a62927559de87708c8913c1650ce4f26",
      "tree": "8004aa51e26203cfdc5d2847caf4b0c4c66c3431",
      "parents": [
        "57af736625aaa69dfa099432bb67e0808eef3bcc"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Wed May 17 16:25:26 2017 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Wed May 17 21:12:32 2017 +0000"
      },
      "message": "semaphore: make test time independent of GOMAXPROCS\n\nTestWeighted\u0027s runtime was roughly proportional to the number of CPUs,\nso it ran a long time on PPCs (160 CPUs).\n\nMake the number of loops in the test an inverse function of the number\nof CPUs, to keep the test short.\n\nChange-Id: Id853dbb5e5e2f9fb95966d19ef0c511e3f8080e0\nReviewed-on: https://go-review.googlesource.com/43632\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "57af736625aaa69dfa099432bb67e0808eef3bcc",
      "tree": "d0c9c993bccc5a46800a8684c304098ee5eb1678",
      "parents": [
        "305c7b3edb4364a58141b30686a61a87bdb79a3a"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Tue May 09 16:06:53 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed May 10 20:14:52 2017 +0000"
      },
      "message": "syncmap: release m.mu during (*RWMutexMap).Range callbacks\n\nThe mainline syncmap.Map has allowed mutations within Range callbacks\nsince https://golang.org/cl/37342. The reference\nimplementations used in map_bench_test need to do the same.\n\nChange-Id: Id73d254fa01cc64a1f00eb1903488796e1282423\nReviewed-on: https://go-review.googlesource.com/42956\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "305c7b3edb4364a58141b30686a61a87bdb79a3a",
      "tree": "56a2e47c7945c7dcb11f22e0c0b316a6b4601d7b",
      "parents": [
        "de49d9dcd27d4f764488181bea099dfe6179bcf0"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu May 04 14:06:05 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu May 04 18:26:18 2017 +0000"
      },
      "message": "syncmap: backport CL 42095\n\nSee https://go-review.googlesource.com/c/42095/.\n\nChange-Id: I9f15a785bb4bd28ab02f17de65c63ad4b6e083c9\nReviewed-on: https://go-review.googlesource.com/42594\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "de49d9dcd27d4f764488181bea099dfe6179bcf0",
      "tree": "960a7d308015952043336b58175c6e4104f770e1",
      "parents": [
        "5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Tue Apr 18 16:42:32 2017 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Apr 18 21:08:38 2017 +0000"
      },
      "message": "semaphore: avoid loop variable capture by closure\n\nChange-Id: I21c5dc48ffe43aa27c50a42f9c9a01ac1f0c747c\nReviewed-on: https://go-review.googlesource.com/40991\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Glenn Lewis \u003cgmlewis@google.com\u003e\n"
    },
    {
      "commit": "5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c",
      "tree": "221f5395cd2568e8236eb2e1402bf4a38e443dfb",
      "parents": [
        "a60ad46e0ed33d02e09bda439efaf9c9727dbc6c"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Fri Mar 17 13:13:11 2017 -0400"
      },
      "committer": {
        "name": "Ian Lance Taylor",
        "email": "iant@golang.org",
        "time": "Fri Mar 17 23:16:01 2017 +0000"
      },
      "message": "semaphore: add a weighted semaphore implementation\n\nThis package provides a weighted semaphore that is context-aware.\n\nThe code is derived from a similar package inside Google.\n\nChange-Id: Id1dad96d79e8ccfd289e4299e8265aa5bdad3a5b\nReviewed-on: https://go-review.googlesource.com/38298\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\nRun-TryBot: Ian Lance Taylor \u003ciant@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "a60ad46e0ed33d02e09bda439efaf9c9727dbc6c",
      "tree": "d8a9466758309c17d74dc23cbca659c26b2f280a",
      "parents": [
        "86ddc858aa39d0f6cccccd733e482ddc52b852e9"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:55:22 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Mar 15 18:56:49 2017 +0000"
      },
      "message": "syncmap: remove blocking for all operations on existing keys\n\nIn the previous version, Loads of keys with unchanged values would\nblock on the Mutex if the map was dirty, leading to potentially long\nstalls while the read-only map is being copied to the dirty map.\n\nThis change adds a double pointer indirection to each entry and an\nextra atomic load on the fast path. In exchange, it removes the need\nto lock the map for nearly all operations on existing keys.\n\nEach entry is represented by an atomically-updated pointer to an\ninterface{} value. The same entries are stored in both the read-only\nand dirty maps. Keys deleted before the dirty map was last copied are\nmarked as \"expunged\" and omitted from the dirty map until the next\nStore to that key.\n\nNewly-stored values exist only in the dirty map. The existence of new\nkeys in the dirty map is indicated by an \"amended\" bit attached to the\nread-only map, allowing Load or Delete calls for nonexistent keys to\nsometimes return immediately (without acquiring the Mutex).\n\nThis trades off a bit of steady-state throughput in the \"mostly hits\"\ncase in exchange for less contention (and lower Load tail latencies)\nfor mixed Load/Store/Delete usage.\n\nUnfortunately, the latency impact is currently difficult to measure\n(#19128).\n\nupdates golang/go#19128\nupdates golang/go#18177\n\nhttps://perf.golang.org/search?q\u003dupload:20170315.5\n\nname                                               old time/op    new time/op    delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap             70.3ns ± 6%    70.2ns ± 4%      ~     (p\u003d0.886 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48          10.9ns ± 4%    13.6ns ±24%      ~     (p\u003d0.314 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.RWMutexMap              86.0ns ± 9%    86.0ns ± 4%      ~     (p\u003d1.000 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48            140ns ± 3%     139ns ± 2%      ~     (p\u003d0.686 n\u003d4+4)\nLoadMostlyHits/*syncmap.Map                          70.6ns ± 8%    70.3ns ± 1%      ~     (p\u003d0.571 n\u003d4+4)\nLoadMostlyHits/*syncmap.Map-48                       10.3ns ± 7%    11.2ns ± 5%      ~     (p\u003d0.114 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap           59.4ns ± 4%    59.4ns ± 4%      ~     (p\u003d1.000 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48        10.4ns ±30%    12.6ns ±29%      ~     (p\u003d0.486 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.RWMutexMap            64.8ns ± 6%    63.8ns ± 4%      ~     (p\u003d0.686 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48          138ns ± 3%     139ns ± 2%      ~     (p\u003d0.800 n\u003d4+4)\nLoadMostlyMisses/*syncmap.Map                        51.5ns ± 7%    50.4ns ± 2%      ~     (p\u003d0.371 n\u003d4+4)\nLoadMostlyMisses/*syncmap.Map-48                     9.37ns ± 3%    9.40ns ± 3%      ~     (p\u003d0.886 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap          820ns ±17%     834ns ±14%      ~     (p\u003d1.000 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48      1.38µs ± 4%    1.38µs ± 3%      ~     (p\u003d0.886 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map                      709ns ±13%    1085ns ± 9%   +53.09%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                  1.30µs ±13%    1.08µs ± 8%   -17.40%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap           1.26µs ±14%    1.16µs ±29%      ~     (p\u003d0.343 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48        1.82µs ±15%    1.98µs ± 6%      ~     (p\u003d0.143 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map                       1.06µs ± 7%    1.86µs ±11%   +76.09%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                    2.00µs ± 4%    1.62µs ± 4%   -19.20%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap       32.9ns ± 8%    32.6ns ± 9%      ~     (p\u003d0.686 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48   2.26ns ±136%    3.41ns ±62%      ~     (p\u003d0.114 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap        58.0ns ±20%    54.6ns ±17%      ~     (p\u003d0.343 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48      458ns ± 2%     445ns ± 6%      ~     (p\u003d0.229 n\u003d4+4)\nLoadOrStoreCollision/*syncmap.Map                    35.8ns ± 5%    39.6ns ± 9%      ~     (p\u003d0.114 n\u003d4+4)\nLoadOrStoreCollision/*syncmap.Map-48                 1.24ns ± 2%    1.58ns ± 4%   +27.16%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap_test.DeepCopyMap                      19.7µs ± 4%    19.8µs ± 3%      ~     (p\u003d0.686 n\u003d4+4)\nRange/*syncmap_test.DeepCopyMap-48                    763ns ± 1%     864ns ± 3%   +13.24%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap_test.RWMutexMap                       20.9µs ± 3%    20.4µs ± 4%      ~     (p\u003d0.343 n\u003d4+4)\nRange/*syncmap_test.RWMutexMap-48                     764ns ± 1%     870ns ± 1%   +13.77%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap.Map                                   20.4µs ± 5%    22.7µs ± 5%   +10.98%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap.Map-48                                 776ns ± 3%     954ns ± 4%   +22.95%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.DeepCopyMap            206ns ± 5%     199ns ± 2%      ~     (p\u003d0.200 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48        8.94µs ± 5%    9.21µs ± 4%      ~     (p\u003d0.200 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap            63.4ns ± 4%    63.8ns ± 3%      ~     (p\u003d0.686 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48          184ns ±10%     198ns ±11%      ~     (p\u003d0.343 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map                         213ns ± 3%     264ns ± 3%   +23.97%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map-48                      556ns ± 5%    1389ns ± 8%  +149.93%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap           300ns ± 6%     304ns ± 7%      ~     (p\u003d0.886 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48        647ns ± 3%     646ns ± 3%      ~     (p\u003d0.943 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap           69.1ns ± 1%    69.2ns ± 6%      ~     (p\u003d0.686 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap-48         289ns ±15%     300ns ±17%      ~     (p\u003d0.829 n\u003d4+4)\nAdversarialDelete/*syncmap.Map                        198ns ± 5%     264ns ± 2%   +33.17%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap.Map-48                     291ns ± 9%     173ns ± 8%   -40.50%  (p\u003d0.029 n\u003d4+4)\n\nname                                               old alloc/op   new alloc/op   delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap              7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48           7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap               7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48            7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap.Map                           7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap.Map-48                        7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap            7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48         7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap             7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48          7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap.Map                         7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap.Map-48                      7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap          95.0B ± 0%     95.0B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48       95.0B ± 0%     95.0B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap.Map                      95.0B ± 0%     88.0B ± 0%    -7.37%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                   95.0B ± 0%     88.0B ± 0%    -7.37%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap             175B ± 0%      175B ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48          175B ± 0%      175B ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap.Map                         175B ± 0%      161B ± 0%    -8.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                      175B ± 0%      161B ± 0%    -8.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap        0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48     0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap         0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48      0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map                     0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map-48                  0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap                       0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap-48                    0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.RWMutexMap                        0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.RWMutexMap-48                     0.00B          0.00B           ~     (all equal)\nRange/*syncmap.Map                                    0.00B          0.00B           ~     (all equal)\nRange/*syncmap.Map-48                                 0.00B          0.00B           ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap            74.0B ± 0%     74.0B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48        3.15kB ± 0%    3.15kB ± 0%      ~     (p\u003d1.000 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap             8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48          8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map                         74.0B ± 0%     55.0B ± 0%   -25.68%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map-48                      8.00B ± 0%    56.25B ± 1%  +603.12%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap            155B ± 0%      155B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48         156B ± 0%      156B ± 0%      ~     (p\u003d1.000 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap            8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap-48         8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map                        81.0B ± 0%     65.0B ± 0%   -19.75%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap.Map-48                     23.0B ± 9%     15.2B ± 5%   -33.70%  (p\u003d0.029 n\u003d4+4)\n\nname                                               old allocs/op  new allocs/op  delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap               0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48            0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap                0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48             0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap.Map                            0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap.Map-48                         0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap             0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap              0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48           0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap.Map                          0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap.Map-48                       0.00           0.00           ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap           2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48        2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap.Map                       2.00 ± 0%      3.00 ± 0%   +50.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                    2.00 ± 0%      3.00 ± 0%   +50.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap             2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48          2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap.Map                         2.00 ± 0%      4.00 ± 0%  +100.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                      2.00 ± 0%      4.00 ± 0%  +100.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap         0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap          0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48       0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map                      0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map-48                   0.00           0.00           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap                        0.00           0.00           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap-48                     0.00           0.00           ~     (all equal)\nRange/*syncmap_test.RWMutexMap                         0.00           0.00           ~     (all equal)\nRange/*syncmap_test.RWMutexMap-48                      0.00           0.00           ~     (all equal)\nRange/*syncmap.Map                                     0.00           0.00           ~     (all equal)\nRange/*syncmap.Map-48                                  0.00           0.00           ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap             1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap              1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48           1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map                          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map-48                       1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap            1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48         1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap             1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap-48          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map                         1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map-48                      1.00 ± 0%      1.00 ± 0%      ~     (all equal)\n\nChange-Id: I93c9458505d84238cc8e9016a7dfd285868af236\nReviewed-on: https://go-review.googlesource.com/37342\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "86ddc858aa39d0f6cccccd733e482ddc52b852e9",
      "tree": "755d7b1c0899755f5a8b93a7fc80b4eab08377c0",
      "parents": [
        "37569ff7631ba24a93f87d09625ec155aa65b676"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:46:11 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 19:22:36 2017 +0000"
      },
      "message": "syncmap: make quick-check output more readable\n\nAdd a test for Range with concurrent Loads and Stores.\n\nThe previous quick-check tests generated long, mostly-non-ASCII\nstrings that were hard to debug on failure; this change makes the keys\nand values short and human-readable, which also tends to produce more\nkey collisions in the test as a side-effect.\n\nupdates golang/go#18177\n\nChange-Id: Ie56a64ec9fe295435682b90c3e6466ed5b349bf9\nReviewed-on: https://go-review.googlesource.com/37150\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "37569ff7631ba24a93f87d09625ec155aa65b676",
      "tree": "e5d5bfc6f9f980c61b6e9ab71e341b8fe64a9988",
      "parents": [
        "54b13b0b037d2b3593991a7fa23d3f274669aab7"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:52:35 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 19:20:33 2017 +0000"
      },
      "message": "syncmap: add benchmark for Range\n\nadjust BenchmarkAdversarialDelete to be somewhat more adversarial.\n\nupdates golang/go#18177\n\nChange-Id: Id01ed1077a0447dcfc6ea3929c22baaddbc9d6ee\nReviewed-on: https://go-review.googlesource.com/37151\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "54b13b0b037d2b3593991a7fa23d3f274669aab7",
      "tree": "5d098b91abbfde01387d5081055a0c5814e6dae8",
      "parents": [
        "450f422ab23cf9881c94e2db30cac0eb1b7cf80c"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Dec 02 19:16:14 2016 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Feb 15 17:32:38 2017 +0000"
      },
      "message": "syncmap: add a synchronized map implementation.\n\nThis is a draft for the sync.Map API proposed in golang/go#18177.\n\nIt supports fast-path loads via an atomic variable, falling back to a\nMutex for stores. In order to keep stores amortized to O(1), loads\nfollowing a store follow the Mutex path until enough loads have\noccurred to offset the cost of a deep copy.\n\nFor mostly-read loads, such as the maps in the reflect package in the\nstandard library, this significantly reduces cache-line contention vs.\na plain RWMutex with a map.\n\ngoos: linux\ngoarch: amd64\npkg: golang.org/x/sync/syncmap\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap               20000000                73.1 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap-48            100000000               13.8 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap                20000000                87.7 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap-48             10000000               154 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map                            20000000                72.1 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map-48                         100000000               11.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap             20000000                63.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          200000000               14.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap              20000000                72.7 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap-48           10000000               150 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map                          30000000                56.4 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map-48                       200000000                9.77 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap            2000000               683 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48         1000000              1394 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map                        2000000               645 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map-48                     1000000              1253 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap              1000000              1015 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap-48           1000000              1911 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map                          1000000              1018 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map-48                       1000000              1776 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap         50000000                30.2 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      2000000000               1.24 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap          30000000                50.1 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap-48        5000000               451 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map                      30000000                36.8 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map-48                   2000000000               1.24 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap             10000000               213 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap-48           1000000              5012 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap              20000000                68.8 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap-48            5000000               429 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map                           5000000               229 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map-48                        2000000               600 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap             5000000               314 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap-48          2000000               726 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap             20000000                63.2 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap-48           5000000               469 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map                         10000000               203 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map-48                      10000000               253 ns/op\n\ngoos: linux\ngoarch: ppc64le\npkg: golang.org/x/sync/syncmap\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap                5000000               253 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap-48            50000000                26.2 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap                 5000000               505 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap-48              3000000               443 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map                            10000000               200 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map-48                         100000000               18.1 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap             10000000               162 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          100000000               23.8 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap              10000000               195 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap-48            3000000               531 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map                          10000000               182 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map-48                       100000000               15.8 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap            1000000              1664 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48         1000000              1768 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map                        1000000              2128 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map-48                     1000000              1903 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap              1000000              2657 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap-48           1000000              2577 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map                          1000000              1714 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map-48                       1000000              2484 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap         10000000               130 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      100000000               11.3 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap           3000000               426 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap-48        2000000               930 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map                      10000000               131 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map-48                   300000000                4.07 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap              3000000               447 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap-48            300000              4159 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap              10000000               191 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap-48            3000000               535 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map                           2000000               525 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map-48                        1000000              1000 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap             2000000               711 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap-48          2000000               900 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap              3000000               354 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap-48           3000000               473 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map                          2000000              1357 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map-48                       5000000               334 ns/op\n\nUpdates golang/go#18177\n\nChange-Id: I8d561b617b1cd2ca03a8e68a5d5a28a519a0ce38\nReviewed-on: https://go-review.googlesource.com/33912\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "450f422ab23cf9881c94e2db30cac0eb1b7cf80c",
      "tree": "dc12aea0b3b771336c7c8b5d319fa67e8a5a1cb5",
      "parents": [
        "81567d9de79acf53912da6b8d098d3a38069e526"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Dec 05 14:39:15 2016 -0800"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Dec 06 01:46:32 2016 +0000"
      },
      "message": ".: add codereview.cfg\n\nThis makes git-codereview review issue references\nto refer to the main Go repo.\n\nChange-Id: I17003885f15358f776a475a76a31dac179de9676\nReviewed-on: https://go-review.googlesource.com/33908\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "81567d9de79acf53912da6b8d098d3a38069e526",
      "tree": "798e9ce2a7122665dd8bfbfa78a482916bb93009",
      "parents": [
        "1ae7c7b29e06598039be46c5083819ba6fd7a97e"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 22 14:36:19 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Dec 01 22:51:26 2016 +0000"
      },
      "message": "errgroup: fix misleading comment in MD5All example\n\nChange-Id: I0c2f0ce9b6006dac13c5f5faed752a2475992805\nReviewed-on: https://go-review.googlesource.com/33851\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\n"
    },
    {
      "commit": "1ae7c7b29e06598039be46c5083819ba6fd7a97e",
      "tree": "dcc43a145d324d76c63207a49c36870994a453c1",
      "parents": [
        "316e794f7b5e3df4e95175a45a5fb8b12f85cb4f"
      ],
      "author": {
        "name": "Matt Layher",
        "email": "mdlayher@gmail.com",
        "time": "Tue Oct 04 18:49:57 2016 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Oct 04 23:36:20 2016 +0000"
      },
      "message": "singleflight: copy from internal/singleflight in standard library\n\nUpdates golang/go#17338\n\nChange-Id: Icf1972cdec0bbc9b3142141d9e706c07f312efc0\nReviewed-on: https://go-review.googlesource.com/30292\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "316e794f7b5e3df4e95175a45a5fb8b12f85cb4f",
      "tree": "4f82021d2f6dd4f55db9298f1f421333ac478b04",
      "parents": [
        "53cf14c8d7596ec5230669db938d396db1bba8a7"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 14:54:39 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 19:05:49 2016 +0000"
      },
      "message": "sync: delete dummy builders_test file\n\nThe builders should be happy building errgroup instead now.\n\nChange-Id: I99f549032f771e067b5f7780eba1cc6e91bbdfa5\nReviewed-on: https://go-review.googlesource.com/24962\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "53cf14c8d7596ec5230669db938d396db1bba8a7",
      "tree": "04e6c860b7c58fdd1718a73a871172162e12c560",
      "parents": [
        "457c5828408160d6a47e17645169cf8fa20218c4"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 14:34:44 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 18:40:41 2016 +0000"
      },
      "message": "errgroup: fix build errors in errgroup_test\n\nChange-Id: Ie5ebfa26b6234f833139784da859d32cc1416b26\nReviewed-on: https://go-review.googlesource.com/24961\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "457c5828408160d6a47e17645169cf8fa20218c4",
      "tree": "e40e10a7f9a8896cf46134683523ba64c1980a3e",
      "parents": [
        "c6cf2573d3cd3711e69e7283ae5c5621442822ad"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Jul 13 13:45:13 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 18:28:34 2016 +0000"
      },
      "message": "errgroup: add package\n\nPackage errgroup provides synchronization, error propagation, and\nContext cancellation for groups of goroutines working on subtasks of a\ncommon task.\n\nChange-Id: Ic9e51f6f846124076bbff9d53b0f09dc7fc5f2f0\nReviewed-on: https://go-review.googlesource.com/24894\nReviewed-by: Sameer Ajmani \u003csameer@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "c6cf2573d3cd3711e69e7283ae5c5621442822ad",
      "tree": "7aad6a3dfe74a113584ee2e7fd7d4837419a4d32",
      "parents": [
        "b62d5b6cb434c43aa5eb12d8970fef8dda5138c7"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "brad@danga.com",
        "time": "Wed Jul 13 13:36:30 2016 -0600"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Wed Jul 13 20:16:11 2016 +0000"
      },
      "message": "sync: add a Go file to make the builders happy\n\nChange-Id: I6e4fbebee02076b8c9d43318c3f7260f2339c1a3\nReviewed-on: https://go-review.googlesource.com/24907\nReviewed-by: Quentin Smith \u003cquentin@golang.org\u003e\n"
    },
    {
      "commit": "b62d5b6cb434c43aa5eb12d8970fef8dda5138c7",
      "tree": "d3c3c858999bf4ed2624131181bed3b9034c1507",
      "parents": [],
      "author": {
        "name": "Andrew Gerrand",
        "email": "adg@golang.org",
        "time": "Fri Oct 30 14:31:46 2015 +1100"
      },
      "committer": {
        "name": "Andrew Gerrand",
        "email": "adg@golang.org",
        "time": "Fri Oct 30 14:31:46 2015 +1100"
      },
      "message": "initial commit\n"
    }
  ]
}
