)]}'
{
  "log": [
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "4b0ef1c980a1f3b0201d77e33bdb2f7df12c9114",
      "tree": "4b8891beab013872144d69f97e918f9914aaf8c8",
      "parents": [
        "7707777f064e9e0aa53c40c189045ab2ea4301ee"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 16:26:01 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 17:54:09 2016 -0700"
      },
      "message": "Revert \"Revert \"Use try lock to fix class resolution race\"\"\n\nFix possible deadlock in EnsureResolved caused by interaction with\nGC. Since we were sleeping while holding the mutator lock, it could\nblock thread suspension. This would deadlock if the thread that\nhad locked h_class is already suspended since we would spin forever\nand not make progress.\n\nBug: 27417671\nBug: 30500547\n\nTest: test-art-host ART_TEST_GC_STRESS\u003dtrue\n\nThis reverts commit 69bf969c055c31a75d17ea92aeee756042678114.\n\nChange-Id: Id8750df065dc3b9ef7dc874f2eb2cc2c58e5d1eb\n"
    },
    {
      "commit": "69bf969c055c31a75d17ea92aeee756042678114",
      "tree": "3132e2e1e5b1f1af558652d9b39eeb6c994ec256",
      "parents": [
        "a704eda0078989a73cac111ed309aca50d2e289b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 20:06:45 2016 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 20:12:48 2016 +0000"
      },
      "message": "Revert \"Use try lock to fix class resolution race\"\n\nThis reverts commit a704eda0078989a73cac111ed309aca50d2e289b.\n\nBug: 27417671\nBug: 30500547\nChange-Id: Ieea05236b9e61c722660cd9497c9d55d13ccd010\n"
    },
    {
      "commit": "a704eda0078989a73cac111ed309aca50d2e289b",
      "tree": "07fd076b3ea6f86bfea71e4c6707fd301f108db5",
      "parents": [
        "9755c262df1be7f5d5b98d038c8fd3734e974f9d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 13 09:53:35 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 27 14:37:42 2016 -0700"
      },
      "message": "Use try lock to fix class resolution race\n\nThere was some possible deadlocks related to EnsureResolved caused by\nacquiring an object lock.\n\nScenario:\nThread 1 acquires lock on obj1\nThread 1 begins to resolve / initialize class1\nThread 1 blocks since it sees that class1 is already being resolved and\ngets preempted before it can acquire the object lock on class1\nThread 2 finishes resolving and initializing class1 and locks class1\nThread 2 blocks attempting to lock obj1\nThread 1 blocks attempting to lock class1\nDeadlock\n\nFixed the deadlock by changing EnsureResolved to use a try lock for the\nunresolved case.\n\nAdded a test.\n\nTest: Device boot, test-art-host, monitor_test\n\nBug: 27417671\nChange-Id: Ic6e1c3ca6f45490cf8a7bf8e137dee71ac83ff64\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "5a4b8a236030460651a3136397d23ca6744e7eb7",
      "tree": "0e43891398e416d3fa77c7de391bf4db4408e8ee",
      "parents": [
        "19f7c95491a053b818f914137fa73df0517b8792"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 11 08:30:08 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 15 19:50:12 2014 -0700"
      },
      "message": "ART: Rename Handle hierarchy\n\nBring the names in line with normal OO principles: ConstHandle\nbecomes Handle, and Handle becomes MutableHandle.\n\nChange-Id: I0f018eb7ba28bc422e3a23dd73a6cbe6fc2d2044\n"
    },
    {
      "commit": "bf99f77dda749e2b653e8c45259b1fb56e7bb012",
      "tree": "98addbb3533c745781bc26e4a55cbbdd6d6e97e7",
      "parents": [
        "762f0a5bdd238458bbb463a9565388f2047a98d4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 23 16:37:27 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 23 16:54:24 2014 -0700"
      },
      "message": "Clean up Handle usage.\n\nPrefer using ConstHandle instead of Handle as function arguments\nsince you can\u0027t assign new references to ConstHandle which helps\nprevent bugs.\n\nChanged NullHandle to be a ConstHandle so that you can never modify\nit to be a non null reference.\n\nChange-Id: I81cb979f6f8d5b49e5614966a2caf28c3701dd4f\n"
    },
    {
      "commit": "22d5e735f403c57525fe868304c7123f0ce66399",
      "tree": "2458684efa56f0b800dd75a9dedd0449f76f581f",
      "parents": [
        "fbde4dd1cb6db729e3f3ee5bdae0cdd824d73054"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 22:23:51 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 16 06:13:46 2014 -0700"
      },
      "message": "Remove object_utils.h.\n\nBreak into object_lock, field_helper and method_helper.\nClean up header files following this.\nAlso tidy some of the Handle code in response to compiler errors when resolving\nthe changes in this CL.\n\nChange-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295\n"
    }
  ]
}
