)]}'
{
  "commit": "9560e6245a1a0b7483a57d7018e5b7a852fdba62",
  "tree": "bc9dba86af84553eda04fe6c4008590d744e3c17",
  "parents": [
    "f9ee2fcdfa05586b6a4476c7aa5f4f0162e48455"
  ],
  "author": {
    "name": "Martin Ågren",
    "email": "martin.agren@gmail.com",
    "time": "Wed Nov 01 21:45:06 2017 +0100"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Thu Nov 02 10:58:08 2017 +0900"
  },
  "message": "grep: take the read-lock when adding a submodule\n\nWith --recurse-submodules, we add each submodule that we encounter to\nthe list of alternate object databases. With threading, our changes to\nthe list are not protected against races. Indeed, ThreadSanitizer\nreports a race when we call `add_to_alternates_memory()` around the same\ntime that another thread is reading in the list through\n`read_sha1_file()`.\n\nTake the grep read-lock while adding the submodule. The lock is used to\nserialize uses of non-thread-safe parts of Git\u0027s API, including\n`read_sha1_file()`.\n\nHelped-by: Brandon Williams \u003cbmwill@google.com\u003e\nSigned-off-by: Martin Ågren \u003cmartin.agren@gmail.com\u003e\nAcked-by: Brandon Williams \u003cbmwill@google.com\u003e\nReviewed-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cd0e51f3c04b1e6fc297a8806fa663d86ebc7734",
      "old_mode": 33188,
      "old_path": "builtin/grep.c",
      "new_id": "6946cf4bbc825cbd1335ab5464428f54483701f8",
      "new_mode": 33188,
      "new_path": "builtin/grep.c"
    }
  ]
}
