)]}'
{
  "commit": "fc2b84d57ce0a5ec7b4173cb1f010b7d0ce1ad36",
  "tree": "08e55a794f115eeb1ea0e520a7548db2493582b8",
  "parents": [
    "007c6c5ccbc6cfb452ac3cc1f7c8365419e59f09"
  ],
  "author": {
    "name": "Antoine Labour",
    "email": "piman@chromium.org",
    "time": "Fri Jun 09 18:14:05 2017 -0700"
  },
  "committer": {
    "name": "Nicolas Capens",
    "email": "capn@google.com",
    "time": "Mon Jun 12 17:18:49 2017 +0000"
  },
  "message": "Synchronize in ~ImageImplementation\n\nThe egl::Image destructor synchronizes with the threads accessing that image.\nHowever, that is too late because by the time ~Image runs, ImageImplementation\nhas already been destructed - concurrently with the other threads running, i.e.\ndata race. In particular, since those threads access virtual member functions on\nImage, they may end up calling the base class ones (which are pure) instead of\nthe derived class ones.\n\nSo make sure to synchronize in ~ImageImplementation instead.\n\nBug: swiftshader:62\n\nChange-Id: I91240d1dbb45dd126c65d86f9aecf77833b4488d\nReviewed-on: https://swiftshader-review.googlesource.com/10029\nReviewed-by: Nicolas Capens \u003ccapn@google.com\u003e\nReviewed-by: Alexis Hétu \u003csugoi@google.com\u003e\nTested-by: Nicolas Capens \u003ccapn@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cfed057d25d6d07aa3914a980701e887b916d6ed",
      "old_mode": 33188,
      "old_path": "src/OpenGL/common/Image.cpp",
      "new_id": "61d91db14eb23f7f4b5524b7850c77bcb72df34b",
      "new_mode": 33188,
      "new_path": "src/OpenGL/common/Image.cpp"
    },
    {
      "type": "modify",
      "old_id": "f29aaaecd111bdef7abec41c4488cd5020e5ffc6",
      "old_mode": 33188,
      "old_path": "src/Renderer/Surface.cpp",
      "new_id": "e964584839359f9357066318663eb7a87d8004a9",
      "new_mode": 33188,
      "new_path": "src/Renderer/Surface.cpp"
    },
    {
      "type": "modify",
      "old_id": "16ff78c14cb31a8983521542afb80638fe17e443",
      "old_mode": 33188,
      "old_path": "src/Renderer/Surface.hpp",
      "new_id": "b54565e698b282b435986bebd5ecd974df9712c3",
      "new_mode": 33188,
      "new_path": "src/Renderer/Surface.hpp"
    }
  ]
}
