)]}'
{
  "log": [
    {
      "commit": "b481a2e743102efc6b18cc586aa979a70e575d64",
      "tree": "25b69c933cd0ca4d776d7845ad22a8692157a0cd",
      "parents": [
        "de39d9242ae38733c33173957386db0b8060e52a"
      ],
      "author": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 20:41:55 2019 +0000"
      },
      "committer": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 20:41:55 2019 +0000"
      },
      "message": "Revert \"Revert \"Make system property reads wait-free\"\"\n\nThis reverts commit de39d9242ae38733c33173957386db0b8060e52a.\n\nReason for revert: This revert is not needed\n\nChange-Id: I34af8e5d75c724f6c4066fafbfc6bc7d58377601\n"
    },
    {
      "commit": "de39d9242ae38733c33173957386db0b8060e52a",
      "tree": "2a7e44d156dac92caacf04f9c6c9c3540638a03f",
      "parents": [
        "0cf90556de2bde53a1957c5946036b2fe2e4e429"
      ],
      "author": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 18:24:06 2019 +0000"
      },
      "committer": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 18:24:06 2019 +0000"
      },
      "message": "Revert \"Make system property reads wait-free\"\n\nThis reverts commit 0cf90556de2bde53a1957c5946036b2fe2e4e429.\n\nReason for revert: Device boot failures - 144355953\n\nChange-Id: Icd4fc8c7a1d06d688a6d37e6f1c1aa45563f711b\n"
    },
    {
      "commit": "0cf90556de2bde53a1957c5946036b2fe2e4e429",
      "tree": "25b69c933cd0ca4d776d7845ad22a8692157a0cd",
      "parents": [
        "5d9ba9ea702a4d20b99639996b8bd27f121d5bd7"
      ],
      "author": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Tue Oct 29 15:40:16 2019 -0700"
      },
      "committer": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Mon Nov 11 11:17:00 2019 -0800"
      },
      "message": "Make system property reads wait-free\n\nRight now, when we read a system property, we first (assuming we\u0027ve\nalready looked up the property\u0027s prop_info) read the property\u0027s serial\nnumber; if we find that the low bit (the dirty bit) in the serial\nnumber is set, we futex-wait for that serial number to become\nnon-dirty. By doing so, we spare readers from seeing partially-updated\nproperty values if they race with the property service\u0027s non-atomic\nmemcpy to the property value slot. (The futex-wait here isn\u0027t\nessential to the algorithm: spinning while dirty would suffice,\nalthough it\u0027d be somewhat less efficient.)\n\nThe problem with this approach is that readers can wait on the\nproperty service process, potentially causing delays due to scheduling\nvariance. Property reads are not guaranteed to complete in finite time\nright now.\n\nThis change makes property reads wait-free and ensures that they\ncomplete in finite time in all cases. In the new approach, we prevent\nvalue tearing by backing up each property we\u0027re about to modify and\ndirecting readers to the backup copy if they try to read a property\nwith the dirty bit set.\n\n(The wait freedom is limited to the case of readers racing against\n*one* property update. A writer can still delay readers by rapidly\nupdating a property --- but after this change, readers can\u0027t hang due\nto PID 1 scheduling delays.)\n\nI considered adding explicit atomic access to short property values,\nbut between binary compatibility with the existing property database\nand the need to carefully handle transitions of property values\nbetween \"short\" (compatible with atomics) and \"long\" (incompatible\nwith atomics) length domains, I figured the complexity wasn\u0027t worth it\nand that making property reads wait-free would be adequate.\n\nTest: boots\nBug: 143561649\nChange-Id: Ifd3108aedba5a4b157b66af6ca0a4ed084bd5982\n"
    },
    {
      "commit": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\n"
    },
    {
      "commit": "d91285f1666a2bbca9f4d620bbd74ab87632a8c4",
      "tree": "8def602a6ddf96c73f971132f87633ff1071bc73",
      "parents": [
        "5258c2518e582585e1b00097296053b334790d13"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue May 01 18:03:05 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue May 01 18:19:21 2018 -0700"
      },
      "message": "Fix PROP_FILENAME_MAX overflow handling\n\nBug: b/79117743\nTest: /data/nativetest64/bionic-unit-tests/bionic-unit-tests\nChange-Id: Idd5aa4d195abc13c06d3e5b57aef69a68c2a9a9d\n"
    },
    {
      "commit": "ee8e3dd67c910907115c7cef87be3d898d71a05d",
      "tree": "022d9c97d9bdc95c34dbf0052b8dcf9ce394bc46",
      "parents": [
        "44c7b6ad0ac277a8ed3ee2278f6c1ee23f130ab5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 15:01:22 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 15:10:17 2018 -0800"
      },
      "message": "Remove non-trivial constructors/destructors from SystemProperties\n\nWith the goal of disallowing exit time destructors, SystemProperties\u0027s\nnon-trivial destructor needs to be removed.  This means replacing the\nunion hack with yet another hack as we don\u0027t want to allocate anything\ndespite relying on some polymorphism.\n\nBug: 73485611\nTest: boot bullhead\nChange-Id: I64223714c9b26c9724bfb8f3e2b0168e47b56bc8\n"
    },
    {
      "commit": "e275d6d72db1868056a204e8483a7346a28cb8d6",
      "tree": "3191e33ca242518f7d486c6b37212c7f682498b0",
      "parents": [
        "721a5305e24b69b68ecc9431526f32131abc8f6c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 11 23:31:33 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 18 15:17:55 2017 -0800"
      },
      "message": "Split properties into their own class to make testing better\n\nReinitializing system properties can result in crashes later in the\nprogram, and is generally not recommended or even supported.  This\nchange moves the actual logic for system properties into a class that\ncan be tested in isolation, without reinitializing the actual system\nproperty area used in libc.\n\nBug: 62197783\nTest: boot devices, ensure properties work\nTest: system property unit tests and benchmarks\nChange-Id: I9ae6e1b56c62f51a4d3fdb5b62b8926cef545649\n"
    },
    {
      "commit": "8be995b6ac69100996e55e1d24c1398a19916436",
      "tree": "e9f19eaab6d54c42730a8fb3fe96a455ac008b11",
      "parents": [
        "e149f3c1d7b6848af6a27e4089d5f0c915e1437d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Dec 14 01:57:37 2017 +0000"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Dec 14 01:58:49 2017 +0000"
      },
      "message": "Revert \"Don\u0027t use serialized propertyinfo\"\n\nThis reverts commit e149f3c1d7b6848af6a27e4089d5f0c915e1437d.\n\nReason for revert: This is ready to be enabled now.\n\nBug: 36001741\n\nChange-Id: I418d3a498ff0712ce9a1857924c6d0039026a664\n"
    },
    {
      "commit": "e149f3c1d7b6848af6a27e4089d5f0c915e1437d",
      "tree": "c591f2e001fa34f2af240f251c5319f77455a18f",
      "parents": [
        "e6e8f6ee77ac0be9b950ddd94f52ebcefe4433ce"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Dec 13 02:48:23 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Dec 13 02:48:23 2017 -0800"
      },
      "message": "Don\u0027t use serialized propertyinfo\n\nThis needs more work before it can be enabled.\n\nBug: 36001741\nTest: boot, check that we\u0027re using old style properties\nChange-Id: I7032f4b4224758b187cf4e8a53fd8845466a5d4a\n"
    },
    {
      "commit": "79b724ca5a33e5dff7c2530b2649648021c1258d",
      "tree": "703e81d1d3c41fe093f4747d4d7d4324427dde2c",
      "parents": [
        "78b40e8fe1f37de319344c92d8e6e1eb595c1067"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Nov 17 17:14:05 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Dec 12 00:36:20 2017 -0800"
      },
      "message": "Add support for serialized property contexts\n\nThis adds support for reading a serialized\n/dev/__properties__/property_info file, which contains a\nserialized trie that maps property names to the SELinux context to\nwhich they belong.\n\nPerformance wise on walleye, this change reduces the start up cost in\nlibc from ~3000us to ~430us.  On a benchmark that calls\n__system_property_find() for each property set on the system, it\nreduces the time per iteration from ~650us to ~292us.\n\nBug: 36001741\nTest: Boot bullhead, walleye, run unit tests\nTest: Benchmark initialization and lookup performance\n\nChange-Id: I0887a3a7da88eb51b6d1bd494fa5bce593423599\n"
    },
    {
      "commit": "8d366a81a361221d872db99d74bbaaa4611bdb82",
      "tree": "d7e363de4e901821136272ca2ac2d16373ec79f1",
      "parents": [
        "f5a6fd2001baad5ea92d50f9e38388a2eda21e23"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Nov 30 15:41:32 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Nov 30 16:26:34 2017 -0800"
      },
      "message": "Fix static classes in system properties\n\nPreviously, the functionality for mapping properties to contexts were\nbroken into a set of classes, each statically defined in\nsystem_properties.cpp to prevent using new/malloc.  This is a mistake\nhowever, since system property initialization happens before static\ninitialization, so it is possible for the Constructors of these\nclasses to clobber the initialized data.\n\nThis change fixes that by placing them in a Union and having that\nUnion have a no-op constructor.  The individual classes will be\ninitialized via placement new before they are used as is typically\ndone with classes in a union.\n\nTest: boot bullhead\nChange-Id: Ideb9d6ad8b6fc768811d8615d005cd4b8d134bce\n"
    },
    {
      "commit": "f76bbf5384c0504b165168f51ccadfb605ccb2af",
      "tree": "c064deacfbff5a8d7de99d8a37ff86d66e4c0101",
      "parents": [
        "fd44b9f8d89ce4f33ff39d7f340a5ed08029d21c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 08 14:01:00 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 14 08:55:27 2017 -0800"
      },
      "message": "Remove some globals from system_properties\n\npa_size should be static to prop_area, so make it so.\n\n__system_property_area__ was reused for various purposes, but\nrealistically is a deprecated symbol and this finally separates us\nfrom it.\n\nBug: 36001741\nTest: boot bullhead, system property unit tests\nChange-Id: I39663cc3b613093fa4c728b21d8ba58754f8e105\n"
    },
    {
      "commit": "fd44b9f8d89ce4f33ff39d7f340a5ed08029d21c",
      "tree": "24268cde0a4afd99c6500691f949687c65ce5985",
      "parents": [
        "0793e3dd07b8ecb5bd0a0e91740f68f42f4f7e60"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 08 14:01:00 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 14 08:50:52 2017 -0800"
      },
      "message": "Split system_properties.cpp into its component pieces\n\nsystem_properties.cpp is a little bit unmanageable in its current\nform, and is overdue for a refactoring into more clearly defined\ncomponents.\n\nOf particular interest, is creating of a Contexts interface that\nhandles mapping of system property name -\u003e SEContext and its\nassociated prop_area, and creating two classes that implement the\ncurrent and legacy functionality.  This is needed as there will likely\nbe a third even newer way to do this mapping.\n\nBug: 36001741\nTest: boot bullhead, system property unit tests\nChange-Id: Ie75ec6fea1a95f90813918f54669d533e51327c6\n"
    }
  ]
}
