)]}'
{
  "commit": "e7eb5906390da90b99b3198f3a46530259f116e0",
  "tree": "5ac7e3699d6f7cccfb21078e5f02dfa4426e944a",
  "parents": [
    "b03a42ad0426484d19dcc63c0a69817b28bba1c5"
  ],
  "author": {
    "name": "Brett Wilson",
    "email": "brettw@chromium.org",
    "time": "Wed Jan 31 21:05:42 2018 +0000"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Wed Jan 31 21:05:42 2018 +0000"
  },
  "message": "Fix GN thread sanitizer bug.\n\nTsan reported that Scope::GetValueWithScope was marking a value as \"used\"\non the same Scope from multiple threads. These sets were all to true so we\nhaven\u0027t noticed any stability problems, but we should not be trying to\nwrite to scopes across threads.\n\nWhat happens is that a template is created by BUILDCONFIG or a .gni file and\ncalled from multiple BUILD.gn files in multiple threads. The scope stored by\nthe template was not marked const, so the derived scopes on each thread were\nreferencing this root closure as mutable and marking variables used in it.\n\nThis solution is to mark the Scope const. The derived scopes will reference\nthe parent scope as a const and no changes to the shared scope will occur.\n\nChange-Id: I0a5026bb2f32b476babab63f479a5d377df410e8\nReviewed-on: https://chromium-review.googlesource.com/890230\nReviewed-by: Dirk Pranke \u003cdpranke@chromium.org\u003e\nCommit-Queue: Brett Wilson \u003cbrettw@chromium.org\u003e\nCr-Original-Commit-Position: refs/heads/master@{#533408}\nCr-Mirrored-From: https://chromium.googlesource.com/chromium/src\nCr-Mirrored-Commit: 9a22cda9d33378a3b579b329c1a3c1738d8973c2",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4e7b3bf9341ef7da63735024e83170fd8da79f34",
      "old_mode": 33188,
      "old_path": "tools/gn/template.h",
      "new_id": "6386ba9f2bafd12352db983624b9c5e1a293ed43",
      "new_mode": 33188,
      "new_path": "tools/gn/template.h"
    }
  ]
}
