)]}'
{
  "log": [
    {
      "commit": "071dbc17290ea1c9c4fa645fb5a2cee796009ae8",
      "tree": "f7bceac752340996cbbc031ddce8eecff198cedc",
      "parents": [
        "b4b1b75a35516bb27b854343d040aa9dcd2b436c"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 11:27:33 2023 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Mar 03 13:27:17 2023 -0800"
      },
      "message": "init: Combine the CheckShutdown() and set_do_shutdown() methods\n\nLet the CheckShutdown() method clear the do_shutdown_ member instead of\nclearing that member separately from calling CheckShutdown().\n\nBug: 266255006\nChange-Id: Ifc1cff2be92a45db7f91be2fdb812930d2fd1ad5\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "b4b1b75a35516bb27b854343d040aa9dcd2b436c",
      "tree": "5d40fd8540b9da54bdf337748d9e12bed3fda711",
      "parents": [
        "1fdbf8d0f87d618deded242e9c22f1cebd9c7c74"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Mar 03 13:21:19 2023 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Mar 03 13:26:58 2023 -0800"
      },
      "message": "init: Remove the DebugRebootLogging() function\n\nThe DebugRebootLogging() function was introduced to help with\nroot-causing b/150863651. Remove this function since this logging\nfunctionality is no longer needed. Also remove the functions and methods\nthat are only used by DebugRebootLogging().\n\nChange-Id: Ia150604c6cd70f42b13d655ba43b95445a55b6e2\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "1fdbf8d0f87d618deded242e9c22f1cebd9c7c74",
      "tree": "d8b5d04d8fc8655250385c4405f1dc7fe78f6a88",
      "parents": [
        "48b39ba01e98706c61717078e8edf7c11ddd4cf4"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 15:34:49 2023 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Mar 03 13:26:58 2023 -0800"
      },
      "message": "init: Combine two if-statements\n\nCombine two if-statements. This change is fine because:\n* The code between the two if-statements does not queue actions.\n* If an action is queued from another thread then WakeMainInitThread()\n  is called after the action has been queued.\n\nBug: 266255006\nChange-Id: Id4b9565ff4fdb3ee2a2bbca316c8c78e0f2d38dd\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "b6b7ccc24f087cffad77be9c2687fbcfb89bb4f2",
      "tree": "023c04f3922f2d3d92d252f9ade2118688eb7c37",
      "parents": [
        "68a59e1c720871277b01131edb3b64908ad03cbf"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 12:27:57 2023 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 13:55:11 2023 -0800"
      },
      "message": "init: Document the locking strategy used in class PropWaiterState\n\nLet the compiler verify that lock_ is held when any of the data members\nare accessed.\n\nBug: 266255006\nChange-Id: I71b341815d84ab530627d934ad4d4681b652b9d8\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "68a59e1c720871277b01131edb3b64908ad03cbf",
      "tree": "2045016bd987b494679a2a31c6baf70aee4d8afb",
      "parents": [
        "16ab2b67f7d42d14bd70f93910a3d9fad621452c"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 11:28:14 2023 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Feb 17 13:55:11 2023 -0800"
      },
      "message": "init: Document the locking strategy in class ShutdownState\n\nLet the compiler verify that shutdown_command_lock_ is held when\nshutdown_command_ is accessed.\n\nBug: 266255006\nChange-Id: Ibd05137ab65e20f247f35bbb2bb1865e05f51f41\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "057b94215ad703db32cc88cef24728b8aaab3bee",
      "tree": "046f93516147b1a4d3d6f943714b9d2945b15e99",
      "parents": [
        "1946945ac0b126f1441d8432426147b9cdac5168"
      ],
      "author": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Tue Dec 20 22:08:43 2022 +0800"
      },
      "committer": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Tue Jan 31 22:11:16 2023 +0800"
      },
      "message": "Reland \"Set the log callback earlier for showing system property set denials\"\n\nPropertyInit loads the build.prop files and set the system properties.\nSet the SELinux log callback before that to show the avc denials for debugging.\n\nTest: $ make init_system\n      Push this module and ensure system property set denials are shown during boot\nBug: 185920634\nBug: 211547922\nChange-Id: If9f34d469d3da2ebdfe64bb611de85a3ca37e000\n"
    },
    {
      "commit": "29d8a42d14544ac81b89243b22e46ce7c5c71701",
      "tree": "b2adb2a6bc28f7021edc8633b71c6cd93f0f5bef",
      "parents": [
        "f9e6c5104d4d0be8661006e75ae2f5b8d227df12"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Tue Nov 29 12:56:34 2022 -0800"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Wed Nov 30 09:17:16 2022 -0800"
      },
      "message": "Revert \"init: Add more diagnostics for signalfd hangs.\"\n\nRevert commit 14f9c15e0560 (\"init: Add more diagnostics for signalfd\nhangs\") because:\n* That commit was intented to help with root-causing b/223076262.\n* The root cause of b/223076262 has been fixed (not blocking SIGCHLD\n  in all threads in the init process).\n\nTest: Treehugger\nChange-Id: I586663ec0588e74a9d58512f7f31155398cf4f52\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "63ae3fdd9d70f01b9730d529f26b98f0f507b85c",
      "tree": "7659539a188b4c0e36b263778da100b7b8ac6495",
      "parents": [
        "25eb51a9412c07690f6ebbc02ad3eb2e8b04d9b3"
      ],
      "author": {
        "name": "Shen Lin",
        "email": "shhenlin@gmail.com",
        "time": "Wed Nov 02 10:58:48 2022 +0800"
      },
      "committer": {
        "name": "Shen Lin",
        "email": "shhenlin@gmail.com",
        "time": "Wed Nov 02 11:01:04 2022 +0800"
      },
      "message": "init: Amend code format for DoLoadApex\n\nTest: m init\nChange-Id: I9d873cdf067ea586f75e62ff8a39cb753151f9ec\n"
    },
    {
      "commit": "1a5b59386d1512a0488c9af0bf921de6fcdb7669",
      "tree": "3cf47d17452e820937dbe81e0d92e22660e3f73f",
      "parents": [
        "874448f4aa562aa1d882ea398383b332110bcfc3"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Tue Oct 25 17:07:36 2022 -0700"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Thu Oct 27 08:07:26 2022 -0700"
      },
      "message": "init: Fix HandleSignalFd()\n\nThere are two bugs in HandleSignalFd():\n* If the one_off argument is true and if no data is read from the\n  signalfd, \u0027siginfo\u0027 is left uninitialized and used in the switch\n  statement in HandleSignalFd().\n* The PLOG() statement in the switch statement should be a LOG()\n  statement since it does not report a failed system call.\n\nThis CL has been tested by changing kDiagnosticTimeout locally from 10s\ninto 100ms.\n\nChange-Id: I0e488dd95bc13e1befaef770c0748d1d47f6e431\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "537ab23872a96c0090daa5dfdad3860cdfaad3f3",
      "tree": "a375b55a64c7e6659b4abe1f0df1ed43122971c8",
      "parents": [
        "1f50b0edb1bcc698b5dc98c6fb073a328510b539",
        "c2b1654c11313b9eec366239bc5108df7a5a051e"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Oct 24 07:14:12 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 24 07:14:12 2022 +0000"
      },
      "message": "Merge \"init: skip cgroup/task_profiles configuration if cgroups are disabled\""
    },
    {
      "commit": "c2b1654c11313b9eec366239bc5108df7a5a051e",
      "tree": "e59a867adf6322a6409bdb86aaf372f06d9262ac",
      "parents": [
        "ad5cc05ca2300563c18a5dd19131d9582ccb115e"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Oct 20 14:14:39 2022 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Oct 21 13:14:23 2022 +0100"
      },
      "message": "init: skip cgroup/task_profiles configuration if cgroups are disabled\n\nWe are planning to remove cgroups from the Micrdroid kernel, since the\nentire VM belongs exclusively to a single owner, and is in the control\nof the cgroups on the host side.\n\nThis patch expoxes CgroupAvailable API from libprocessgroup, and changes\ninit to query the CgroupAvailable API before doing any\ncgroups/task_profiles related work.\n\nBug: 239367015\nTest: run MicrodroidDemoApp\nTest: atest --test-mapping packages/modules/Virtualization:avf-presubmit\nChange-Id: I82787141cd2a7f9309a4e9b24acbd92ca21c145b\n"
    },
    {
      "commit": "bc5c4a4659596ee1eab14b2f9650816cafa9f55d",
      "tree": "f72c844825cd36e88f814e3c883b37f5eb8d11cd",
      "parents": [
        "a1c8a622b25ea742a340453d1a9ed527081b5bca"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Oct 14 09:13:19 2022 -0700"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Thu Oct 20 09:32:51 2022 -0700"
      },
      "message": "init/epoll: Make Epoll::Wait() easier to use\n\nInvoke the callback functions from inside Epoll::Wait() instead of\nreturning a vector with pointers to callback functions. Remove handlers\nafter handler invocation finished to prevent that self-removal triggers\na use-after-free.\n\nThe CL that made Epoll::Wait() return a vector is available at\nhttps://android-review.googlesource.com/c/platform/system/core/+/1112042.\n\nBug: 213617178\nChange-Id: I52c6ade5746a911510746f83802684f2d9cfb429\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "4842650043b67bcdf3ff7fd6e1dc9691b46aa41b",
      "tree": "0e4ae2156b9288817faf1ad88588538757b9111c",
      "parents": [
        "cc7ddc04f939a199e4aeedf543cb0af4c4a16b9c"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Mon Oct 17 10:28:46 2022 -0700"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Thu Oct 20 09:32:51 2022 -0700"
      },
      "message": "init: Improve readability of the code in SecondStageMain()\n\nChange the type of epoll_timeout from\nstd::optional\u003cstd::chrono:milliseconds\u003e into std::chrono::milliseconds.\nNo functionality is changed.\n\nBug: 213617178\nChange-Id: Ieb150e0aeabdb79c8da4649875ea3ed59297343b\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "a2c160449b79c23d82f65b1b85b9fa2de42eb3a0",
      "tree": "90cc381fdd58596bffe6e5bfc3611fc83d9185d6",
      "parents": [
        "20954a8e3400568ec8e91a865eb065d690a1cbe0"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Fri Oct 14 09:35:35 2022 -0700"
      },
      "committer": {
        "name": "Bart Van Assche",
        "email": "bvanassche@google.com",
        "time": "Tue Oct 18 09:17:55 2022 -0700"
      },
      "message": "init: Introduce Epoll::SetFirstCallback()\n\nPrepare for optimizing Epoll::Wait() by moving the\nReapAnyOutstandingChildren() call into Epoll::Wait(). No functionality\nis changed.\n\nBug: 213617178\nChange-Id: I280ea0069ed29cf323e4177ec500b30b900f7c8d\nSigned-off-by: Bart Van Assche \u003cbvanassche@google.com\u003e\n"
    },
    {
      "commit": "c69bcd4a6db45bd4ce3ede6be8f0cdf68327d788",
      "tree": "070dd16cda5143a5b861ebc8afda31d5e11321db",
      "parents": [
        "b1e4f98b967a8690232c7a92a4ef3c4c91a2ce28",
        "259b63d71c072fc5b9a657c7f412e31394801884"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Sep 02 06:46:54 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 02 06:46:54 2022 +0000"
      },
      "message": "Merge \"Removed property init.apex.\u003capex-name\u003e.load/unload.\""
    },
    {
      "commit": "259b63d71c072fc5b9a657c7f412e31394801884",
      "tree": "b108308f7e3e9fc400a451961d1d7891c8e8ee67",
      "parents": [
        "238e909349812382f26e0ccae2af1f77e049e1a9"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Tue Aug 30 19:19:23 2022 +0000"
      },
      "committer": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Thu Sep 01 16:14:00 2022 +0000"
      },
      "message": "Removed property init.apex.\u003capex-name\u003e.load/unload.\n\nBug: 240533726\nTest: atest CtsInitTestCases ApexTestCases\nChange-Id: I7ed149f24dc4b116865320c85389ffe7bae6ae0d\n"
    },
    {
      "commit": "e37c15e9b09cc8748956eae84a78bcd7fed2eee9",
      "tree": "4f65796d92cbcbfa673603a6ddf59f68c63478b2",
      "parents": [
        "3a6ec217c65f9312dd7ef9a41f6c4430adb027a5",
        "238e909349812382f26e0ccae2af1f77e049e1a9"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Wed Aug 31 16:09:43 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 31 16:09:43 2022 +0000"
      },
      "message": "Merge changes from topic \"vapex_stop_service\"\n\n* changes:\n  Remove and add service and action during apex load and unload\n  Stop services when unload an apex\n"
    },
    {
      "commit": "238e909349812382f26e0ccae2af1f77e049e1a9",
      "tree": "552736725c3276c5cad2a52136326b27d0c348c2",
      "parents": [
        "07595e198c2e1892f60f2ef55fc2dbcbe5282483"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Thu Jul 21 23:05:13 2022 +0000"
      },
      "committer": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Tue Aug 30 17:31:00 2022 +0000"
      },
      "message": "Remove and add service and action during apex load and unload\n\nBug: 232114573\nTest: atest CtsInitTestCases ApexTestCases\nChange-Id: I1f91ada1d44ac2380e2faf8fc25e0a521cc1a826\n"
    },
    {
      "commit": "07595e198c2e1892f60f2ef55fc2dbcbe5282483",
      "tree": "1e38a523d2e33eb4b06912b09c45eb17c982c489",
      "parents": [
        "6eb4d64eae07d81550b18aff92391c3a912f6da4"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Fri Jul 15 22:02:14 2022 +0000"
      },
      "committer": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Wed Aug 24 06:22:57 2022 +0000"
      },
      "message": "Stop services when unload an apex\n\nBug: 238854102\nTest: atest CtsInitTestCases ApexTestCases\nChange-Id: I3b9df9424f7841c42bd1bde27cd0e0750615bd6c\n"
    },
    {
      "commit": "aebf88191b3d75bb029fbd868841fec975f33eff",
      "tree": "bfd4f53667f0b55f09ff3b2f62d5ef4c1d40ca90",
      "parents": [
        "07316159c332950d514c19428076a633cac926dc",
        "ec73481e58e812366c5d6c4e46b19c72df21f06f"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Fri Jul 22 23:09:19 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Jul 22 23:09:19 2022 +0000"
      },
      "message": "Merge \"Add apex name to service\" am: ec73481e58\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2155014\n\nChange-Id: I3c44c321568173fa11588c2d6c69a43ad48c63f9\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "df40ed1be1b2e28c3ed693f3176ed26d3ada6a49",
      "tree": "9f1c07efaec3c1c17cc28b64763b0b71d400381c",
      "parents": [
        "44f1f094b3a387f42ede01bb40665c681a4e7df7"
      ],
      "author": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Thu Jul 14 22:51:10 2022 +0000"
      },
      "committer": {
        "name": "Deyao Ren",
        "email": "deyaoren@google.com",
        "time": "Fri Jul 22 04:00:30 2022 +0000"
      },
      "message": "Add apex name to service\n\nPassed apex file name to service. The file name will be parsed\nto determine 1) whether the service is from an apex; 2) apex name\n\nBug: 236090201\n\nChange-Id: I2c292c0c067f4bf44bb25b1f80e4f972b94f7258\n"
    },
    {
      "commit": "6bfcefca0a4e5aee39135b045741e13d2fba88a7",
      "tree": "da650cd3c264734234ba3f1c6607abd7e0793733",
      "parents": [
        "c3e43e63febddfde71babe8fa30f93ef0ec693cf",
        "11e757c9ccdc93ba3ab2679effe5f7f45779fef1"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Mon Jul 18 23:59:47 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Mon Jul 18 23:59:47 2022 +0000"
      },
      "message": "Merge \"Update linker configuration when loading apex\" am: 11e757c9cc\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2155096\n\nChange-Id: Ife9943c015595c8d1381716fede99ad0fce2fab1\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "626be07153ec1f35fc66ebed4fddf4fc5039585c",
      "tree": "50653c832adc2d62b325f431ce59e08e8fd7d2d7",
      "parents": [
        "46fa45d82c91839ad5ff221cb59f984a7913ac79"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue Jul 12 14:29:16 2022 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Mon Jul 18 17:45:15 2022 +0900"
      },
      "message": "Update linker configuration when loading apex\n\nOn ctl.apex_load \u003capex_name\u003e control message, init invokes linkerconfig\nto update linker configuration for the updated apex.\n\nBug: 232173613\nTest: CtsInitTestCases\nTest: VendorApexHostTestCases\nChange-Id: I01d975849c3f4efe74205a7b04ebbd6864ba1121\n"
    },
    {
      "commit": "db126b9a4eed4331bae143321b763331ec04b29d",
      "tree": "1908a9f65006031832d87df2ef5a44821ca43f08",
      "parents": [
        "e6c462d209190b9d31cb9a0a4e2fc69566fa785d",
        "46fa45d82c91839ad5ff221cb59f984a7913ac79"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Sat Jul 16 03:19:31 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sat Jul 16 03:19:31 2022 +0000"
      },
      "message": "Merge \"Return Result\u003cT\u003e from Do(Un)LoadApex()\" am: 46fa45d82c\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2155095\n\nChange-Id: Ib73a4ed9cfb73ebd26cd03d2c3119aab5f17c5e2\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "a2fe3e577e07da15517feb29b8b30b9d55470db5",
      "tree": "7e1800839dcb961868fc2aea0438065b9436fc37",
      "parents": [
        "86cc51ae603185e50d776c8d244fc482b048f2b5"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue Jul 12 14:23:37 2022 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Sat Jul 16 08:37:06 2022 +0900"
      },
      "message": "Return Result\u003cT\u003e from Do(Un)LoadApex()\n\nFor consistent error message. This is a preparation step for the\nfollow-up change: to generate linker configuration in DoLoadApex()\n\nBug: 232173613\nTest: CtsInitTestCases\nChange-Id: I27954ae2429e82da1bde1925ef62b277c24129d3\n"
    },
    {
      "commit": "e03286ac40492e66f3492588bd2cde1abb775262",
      "tree": "536a6849793fdd9193ddf78a333fedda3da3394d",
      "parents": [
        "5591ee3531a33fbf5510ed0e884cbbd86736d934",
        "e271146ec8b63e53516999758ab262fae6aa8a2e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 13 04:20:59 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jul 13 04:20:59 2022 +0000"
      },
      "message": "Merge \"Add ctl.apex_(un)load properties to (un)load apex\" am: e271146ec8\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2146970\n\nChange-Id: I26a3865aaaae2ded31c84e701a0a6fe3592b65a1\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "678f0b48286bccd3eeac9245b6ef0dabecc6df3b",
      "tree": "fcc6f07a1df1c8843c82d8396fe0467cb4f11953",
      "parents": [
        "ff3fdf36ef33623a567614d9baf792399c89219d"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu Jul 07 15:25:02 2022 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu Jul 07 15:58:33 2022 +0900"
      },
      "message": "Add ctl.apex_(un)load properties to (un)load apex\n\nThese props are supposed to be used by apexd when installing an apex\nwithout reboot. During the installation, apexd will unmount the current\none and mount the new one. Since the path and its contents will be\nreplaced, anything loaded from the apex should be unloaded before\nunmounting. After apexd mounts the apex again, then init should re-read\n.rc files from the apex.\n\nThis change only addes required properties:\n- ctl.apex_load \u003capex_name\u003e\n- ctl.apex_unload \u003capex_name\u003e\n- init.apex.\u003capex_name\u003e \u003d loaded | unloaded\n\nBug: 232114573\nBug: 232173613\nTest: atest CtsInitTestCases\nChange-Id: I4a8942d67912e2f11acc51bec756c4e3c218179a\n"
    },
    {
      "commit": "7772fc84f553fd0a30025716ebfdfc98e4fa2773",
      "tree": "461ea13d433d701e6249b1c1bb2e91f6bb228655",
      "parents": [
        "c0b9b5f2d3f5ff2494784a03005b71034f16889d",
        "c0e0892a5a85ff368504a912ef2f2d8817ad2fc0"
      ],
      "author": {
        "name": "Kean Mariotti",
        "email": "keanmariotti@google.com",
        "time": "Wed Jun 08 09:50:51 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jun 08 09:50:51 2022 +0000"
      },
      "message": "Merge \"Revert \"Set the log callback earlier for showing system property set denials\"\" am: 526fbe2a37 am: c0e0892a5a\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2118487\n\nChange-Id: I351a3a385c5d1be27258343db342910c5ec0291f\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "526fbe2a372a38dd55b5d7a433712dc0ea4d9390",
      "tree": "7cfc487cb85e2d4ce713e523cc7fdc1cd5026d49",
      "parents": [
        "af74368a364ce68385065370f7be0c51fb23bece",
        "3a6040eb7159a73500bd9c7e6c1597ad008b5c84"
      ],
      "author": {
        "name": "Kean Mariotti",
        "email": "keanmariotti@google.com",
        "time": "Wed Jun 08 09:07:42 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 08 09:07:42 2022 +0000"
      },
      "message": "Merge \"Revert \"Set the log callback earlier for showing system property set denials\"\""
    },
    {
      "commit": "3a6040eb7159a73500bd9c7e6c1597ad008b5c84",
      "tree": "1b35e15a3e6c547f6753fcc95caf73e1f064a26a",
      "parents": [
        "8c224faa24039853028c3d9c0e1eadc5ef7bd935"
      ],
      "author": {
        "name": "Kean Mariotti",
        "email": "keanmariotti@google.com",
        "time": "Wed Jun 08 07:57:53 2022 +0000"
      },
      "committer": {
        "name": "Kean Mariotti",
        "email": "keanmariotti@google.com",
        "time": "Wed Jun 08 07:57:53 2022 +0000"
      },
      "message": "Revert \"Set the log callback earlier for showing system property set denials\"\n\nThis reverts commit 8c224faa24039853028c3d9c0e1eadc5ef7bd935.\n\nReason for revert: 235312897\n\nChange-Id: I80684c80bb6f97853449d429bbf948c07d4cb651\n"
    },
    {
      "commit": "c0b9b5f2d3f5ff2494784a03005b71034f16889d",
      "tree": "028d37b78a28ec9b8d0238d2f9ee65b887f6e112",
      "parents": [
        "7c3e3e0bc743e50bbe2071c15be7c5112fd55596",
        "219306f683743e87927b88f6ae9431bf8f3020bf"
      ],
      "author": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Wed Jun 08 06:11:38 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jun 08 06:11:38 2022 +0000"
      },
      "message": "Merge \"Set the log callback earlier for showing system property set denials\" am: af74368a36 am: 219306f683\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1684665\n\nChange-Id: Ic880afd4b9393b6d5e0516c914d00c5ec27de55c\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "af74368a364ce68385065370f7be0c51fb23bece",
      "tree": "b8968854444ba62207e1921a0fac10689e181cee",
      "parents": [
        "7e25d3e8fa587a7adbc86ae2ffb9d40a6cfe509a",
        "8c224faa24039853028c3d9c0e1eadc5ef7bd935"
      ],
      "author": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Wed Jun 08 05:37:22 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 08 05:37:22 2022 +0000"
      },
      "message": "Merge \"Set the log callback earlier for showing system property set denials\""
    },
    {
      "commit": "4a8d564a5e56a2765ee3dcb65d7625c774e06da3",
      "tree": "ba8033346c22ca521ae5e9ce30b6404d227285e7",
      "parents": [
        "c2d6134c2b8e114348db9793fd61042e1de93e8e",
        "364bc73186d714ce3b2a0b8590488a72f6114c3d"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri May 13 03:55:45 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri May 13 03:55:45 2022 +0000"
      },
      "message": "Merge changes from topics \"action-in-apex-config\", \"apex-ready-event\", \"subcontext-for-vendor-apex\" am: ec76b5cb4e am: 364bc73186\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2093006\n\nChange-Id: I3f9f6446af71094526e3c5a2ff2034ba25495c7a\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "03baf470dc447a0b576847cea663d3bec0f6f898",
      "tree": "22040232c8c7961050baa2131a0cbb3501c144af",
      "parents": [
        "4e1e3e5575bcc1795c0b1c0dd2f54d9fd0e8f986",
        "bc3ec37dadffa9165dda32c50865eafa07b749a5"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri May 13 03:55:36 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri May 13 03:55:36 2022 +0000"
      },
      "message": "APEX configs support \u0027on\u0027 as well am: badb7de1a2 am: bc3ec37dad\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2093004\n\nChange-Id: I6b656e0e9de265f1532406236d38578e2a99cf7f\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "38631955068ae3781255c37e4603ab6b3cdd6e03",
      "tree": "766a0cacb7ba6fcd037532adf2cd10ffada6561c",
      "parents": [
        "d5fbaa0e3fe60444e7f7f2c7a104cb328b4dc311",
        "32cfdb4be7cc7f68037d7bb2ab74dc7f9c0fa4c2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 12 05:08:43 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu May 12 05:08:43 2022 +0000"
      },
      "message": "Merge \"Use new AndroidUnwinder object.\" am: dbe14f2f73 am: 32cfdb4be7\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2095788\n\nChange-Id: I18b4dfda04db0fadf49fa9ce9112e1205c3c21ad\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "38e8e74550fa852fd2dadab415cbea6b4acc29bf",
      "tree": "90c6d33ac580cac5022306df8f3107cdf496ab8d",
      "parents": [
        "1eb3394e9c9ea0d19abf195a60ccbe1c28dd8388"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue May 10 05:35:35 2022 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu May 12 13:37:19 2022 +0900"
      },
      "message": "Use subcontext for APEX configs from /{vendor, odm}\n\nInstead of using config file path, use APEX\u0027s preinstalled path to\ndetermine whether to use subcontext or not for APEX configs.\n\nBug: 232021354\nTest: CtsInitTestCases, CtsBluetoothTestCases\nChange-Id: Iba603f09602f0bec3113e2be3d15c62055c09e72\n"
    },
    {
      "commit": "badb7de1a23563dbc7b72f1c1d241c9085d5e4ed",
      "tree": "1a7c4ead4f2b607e0580f9a494175899630ae5dd",
      "parents": [
        "dbe14f2f739264a53a388bdd77b7d807ecdd03c8"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue May 10 03:16:51 2022 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu May 12 13:37:13 2022 +0900"
      },
      "message": "APEX configs support \u0027on\u0027 as well\n\nAPEX configs have supported only \u0027service\u0027 definitions. For those\nservices relying on \u0027on\u0027 trigger actions, we had to have separate config\nfiles installed in read-only partitions (e.g. /system/etc/init).\n\nThis was suboptimal because even though APEXes are updatable, read-only\npartitions are not.\n\nNow, \u0027on\u0027 is supported in APEX configs. Putting \u0027on\u0027 trigger actions\nnear to service definitions makes APEX more self-contained.\n\n\u0027on\u0027 trigger actions loaded from APEX configs are not sticky. So, events\nhappens before loading APEX configs can\u0027t trigger actions. For example,\n\u0027post-fs-data\u0027 is where APEX configs are loaded for now, so \u0027on\npost-fs-data\u0027 in APEX configs can\u0027t be triggerd.\n\nBug: 202731768\nTest: atest CtsInitTestCases\nChange-Id: I5a01d9c7c57b07955b829d6cc157e7f0c91166f9\n"
    },
    {
      "commit": "d2bd6c5f13bd4716c9bb9b0e00bb71d8b377dc82",
      "tree": "09056f3f7ce0c592952fdfed67e40a5f63b08474",
      "parents": [
        "af4db6749ab44762d9662d260d230162237891ad"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 11 14:42:38 2022 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 11 15:39:20 2022 -0700"
      },
      "message": "Use new AndroidUnwinder object.\n\nReplace libbacktrace with the new AndroidUnwinder object.\n\nBug: 120606663\n\nTest: Ran unit tests.\nTest: Added call of UnwindMainThreadStack() in DebugRebootLogging()\nTest: and verified unwind data is logged properly.\nChange-Id: Ia724f9485377d6d2c894283242a3c5653bf82768\n"
    },
    {
      "commit": "071d75052b701c7ab1b601ee7115afe1c2271393",
      "tree": "a11e827b7f05d61a7a9206e2e90452c590d6cee2",
      "parents": [
        "c0830c138cc766f5fdba81966ff1ce79f1c31df8",
        "0d701c13b6a55592ffd65183d32808fff31e2d29"
      ],
      "author": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Sun Apr 17 00:25:11 2022 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sun Apr 17 00:25:11 2022 +0000"
      },
      "message": "Merge \"libsnapshot: Remove invalid snapshot metadata\" am: e3cca4a0d1 am: d2611d1c1c am: 0d701c13b6\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/2061835\n\nChange-Id: Ica6ad814de0853722fd2e5d4ab41670a29f3f36e\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "f86fca236fe5ae29cdba649a4efa9f13de1e55df",
      "tree": "6f8411aa22bd1c7debdfd23758a28a75aaa199a5",
      "parents": [
        "4691a163c114b28f87db961827915f14a8810779"
      ],
      "author": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Tue Apr 12 21:59:05 2022 +0000"
      },
      "committer": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Sat Apr 16 16:43:35 2022 +0000"
      },
      "message": "libsnapshot: Remove invalid snapshot metadata\n\nIf there are snapshot metadata persisting in /metadata/ota/snapshots,\nremove them before applying a new update. Make sure that\nthe snapshots are indeed invalid before removing them.\n\nOn a sidenote, add a comment in init.cpp related to\nb/223076262.\n\nBug: 228250473\nTest: 1: Apply OTA in recovery through adb sideload\n2: Reboot\n3: Apply OTA OTA again through update_device.py\n4: Re-run Full OTA updates just from update_device.py\n\nSigned-off-by: Akilesh Kailash \u003cakailash@google.com\u003e\nChange-Id: I116bbafae09042b9c391ccd58c102704571c214e\n"
    },
    {
      "commit": "6776e645f1491a2256e078d810addf011458b1c1",
      "tree": "7e8c7ab73b2c852d71d213022f9b8182dd4a75cd",
      "parents": [
        "b18826fc3b4c38f0aa3e789d2673ae56e121a169",
        "e966e6e75f5a6fe3669446e6a1a4ea74ab43cde8"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Sat Apr 16 05:32:58 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 16 05:32:58 2022 +0000"
      },
      "message": "Merge changes I16bd2d5e,I04e9bf73\n\n* changes:\n  DO NOT MERGE: Revert \"init: Add more diagnostics for signalfd hangs.\"\n  DO NOT MERGE: Revert \"init: Add diagnostics for signalfd epoll failures.\"\n"
    },
    {
      "commit": "fc90774ef2ec90bf56271e7bf3a99c9bc7a35ec9",
      "tree": "1b3f53d6cb3f719999d4e4c40377cf7df010ade4",
      "parents": [
        "0fa7c40c4cf1597dd0cca1f60b5eef8fdf6168a3"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Apr 08 01:40:34 2022 +0000"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Apr 15 01:00:27 2022 +0000"
      },
      "message": "DO NOT MERGE: Revert \"init: Add diagnostics for signalfd epoll failures.\"\n\nThis reverts commit 0fa7c40c4cf1597dd0cca1f60b5eef8fdf6168a3.\n\nReason for revert: Diagnostics no longer needed\n\nChange-Id: I04e9bf73b89411f7092348f57bfe6eb7dfaa9fcb\n"
    },
    {
      "commit": "d7f2bfba54845803e2390c23d9c795d678ca49a5",
      "tree": "ea29eb6e00e44801be8af9ecd4c19f09789cf875",
      "parents": [
        "9bfe3e784ec4d9b4f8585e1fd5fd8f1d555ad5db"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Apr 05 06:53:32 2022 +0000"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Apr 05 07:16:27 2022 +0000"
      },
      "message": "init: Add more diagnostics for b/223076262.\n\nThis adds three more diagnostics to stuck exec services:\n\n1. /proc/pid/fds is dumped\n2. /proc/pid/status is dumped\n3. HandleSignalFd is called to see if a SIGCHLD got stuck somewhere\n\nBug: 223076262\nTest: while (1) in linkerconfig\nIgnore-AOSP-First: diagnostics\nChange-Id: Ida601d86e18be9d49b143fb88b418cbc171ecac6\n"
    },
    {
      "commit": "fe62ca71650ec086c5b6e4ef1fd1561c06d5487a",
      "tree": "dc6191774bb9c01ef9f7bfdf40e743055f948c68",
      "parents": [
        "4c7dc7bd1d0dd71e7f2a3b41b139de78a27bacf8",
        "14f9c15e056061df338b258505d1ad2e3473baed"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Mar 16 23:11:12 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 16 23:11:12 2022 +0000"
      },
      "message": "Merge \"init: Add more diagnostics for signalfd hangs.\""
    },
    {
      "commit": "14f9c15e056061df338b258505d1ad2e3473baed",
      "tree": "9da4e33d338da2bce8cfcefc05ef8ed59939179d",
      "parents": [
        "a323e0233df417dbc81f4eee6aa65573173a1d3d"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Mar 15 21:55:23 2022 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Mar 16 05:06:17 2022 +0000"
      },
      "message": "init: Add more diagnostics for signalfd hangs.\n\nThis adds two new diagnostics. First, signalfd reads are now non-blocking. If the read takes more than 10 seconds, we log an error.\n\nSecond, init now wakes up from epoll() every 10 seconds. If it waits on an \"exec\" command for more than 10 seconds, it logs an error.\n\nThis change will be reverted as soon as we get feedback.\n\nBug: 223076262\nTest: device boots\nChange-Id: I7ee98d159599217a641b3de2564a92c2435f57ef\n"
    },
    {
      "commit": "6e43216340c35c6e9bdd0e2d5e2d467a7fffbdb9",
      "tree": "dd1edfbf44ab0226f812bddcc3f1c1f7c09b3e60",
      "parents": [
        "83785021f7892e4590dd653f1b4ed5d98476c003"
      ],
      "author": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Tue Jan 25 19:13:32 2022 +0000"
      },
      "committer": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Mon Mar 14 20:49:53 2022 +0000"
      },
      "message": "Revert \"init: Add diagnostics for snapuserd hangs\"\n\nThis reverts commit 471643a90943f5d432f3457db43986c4449d3dd6.\n\nReason for revert: Given https://r.android.com/1960063, it is safe to revert this diagnostics patch\n\nChange-Id: Ib3600c1982ee10a0204ac0fdbc3e160c2833ed07\n"
    },
    {
      "commit": "0fa7c40c4cf1597dd0cca1f60b5eef8fdf6168a3",
      "tree": "b237411aab6aee9fe9a00f5ef7cc20aa3580bb96",
      "parents": [
        "a323e0233df417dbc81f4eee6aa65573173a1d3d"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Mar 07 19:10:57 2022 -0800"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Mar 07 21:10:40 2022 -0800"
      },
      "message": "init: Add diagnostics for signalfd epoll failures.\n\nBug: 222441619\nTest: inject failure with close, check for log messages\nChange-Id: Ia18b88841779e230d00a6c47aaed4952b1444f85\n"
    },
    {
      "commit": "471643a90943f5d432f3457db43986c4449d3dd6",
      "tree": "16a6af36638baee925c296b9d4a625b0ac0026d6",
      "parents": [
        "0a4e111bc6d401214875f9f564924a9d95984ae9"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jan 19 20:53:03 2022 -0800"
      },
      "committer": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Fri Jan 21 17:35:33 2022 +0000"
      },
      "message": "init: Add diagnostics for snapuserd hangs\n\nThis patch attempts to diagnose snapuserd hangs by performing reads\nimmediately after entering second-stage init. This is done by spawning\ntwo threads: one to perform the reads, and another to wait for the read\nthread to finish. If any aspect of the read fails, or the read thread\ndoes not complete in 10 seconds, then a list of snapuserd\u0027s open file\ndescriptors are logged.\n\nBug: 207298357\nTest: apply working OTA, check logcat for success\n      apply broken OTA, check logcat for fd map\nChange-Id: I549e07b7d576fcdaca9b2d6ff33e0924c3812c07\n"
    },
    {
      "commit": "1e966fa9f1b2fa576f7e257a50088f68ff6e8dfe",
      "tree": "470c44e7f3cac48e7ca7397219a3e427430dc3b2",
      "parents": [
        "bc6317592aacfd28651e9afb3a9a1ff766a85fdc"
      ],
      "author": {
        "name": "Alexander Potapenko",
        "email": "glider@google.com",
        "time": "Wed Sep 29 12:14:35 2021 +0000"
      },
      "committer": {
        "name": "Alexander Potapenko",
        "email": "glider@google.com",
        "time": "Fri Oct 01 16:06:02 2021 +0000"
      },
      "message": "init: introduce ro.kernel.version property\n\nThis property will hold the major.minor part of the kernel version (e.g. \"5.4\"), allowing init scripts to act depending on that version, enabling and disabling certain features.\n\nBug: 194156700\nChange-Id: Icec640b8a7150b344d9aa3bc0bdbcdae050c7c45\nTest: manual on a Pixel device\nSigned-off-by: Alexander Potapenko \u003cglider@google.com\u003e\n"
    },
    {
      "commit": "0e5ad5a09385541b9e31a8c47993d1e282810ccb",
      "tree": "fe1a2bf6760545f524a9945ca00b6db8cfc010e7",
      "parents": [
        "0b23b2a346542946b6b00b5ea7c578998755efd1"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jul 21 21:53:28 2021 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Jul 27 19:35:29 2021 -0700"
      },
      "message": "snapuserd: Allow connecting to the first-stage daemon.\n\nCurrently there is no socket for daemon instances launched during the\nselinux phase of init. We don\u0027t create any sockets due to the complexity\nof the required sepolicy.\n\nThis workaround will allow us to create the socket with very minimal\nsepolicy changes. init will launch a one-off instance of snapuserd in\n\"proxy\" mode, and then the following steps will occur:\n\n1. The proxy daemon will be given two sockets, the \"normal\" socket that\nsnapuserd clients would connect to, and a \"proxy\" socket.\n2. The proxy daemon will listen on the proxy socket.\n3. The first-stage daemon will wake up and connect to the proxy daemon\nas a client.\n4. The proxy will send the normal socket via SCM_RIGHTS, then exit.\n5. The first-stage daemon can now listen and accept on the normal\nsocket.\n\nOrdering of these events is achieved through a snapuserd.proxy_ready\nproperty.\n\nSome special-casing was needed in init to make this work. The snapuserd\nsocket owned by snapuserd_proxy is placed into a \"persist\" mode so it\ndoesn\u0027t get deleted when snapuserd_proxy exits. There\u0027s also a special\ncase method to create a Service object around a previously existing pid.\n\nFinally, first-stage init is technically on a different updateable\npartition than snapuserd. Thus, we add a way to query snapuserd to see\nif it supports socket handoff. If it does, we communicate this\ninformation through an environment variable to second-stage init.\n\nBug: 193833730\nTest: manual test\nChange-Id: I1950b31028980f0138bc03578cd455eb60ea4a58\n"
    },
    {
      "commit": "8c224faa24039853028c3d9c0e1eadc5ef7bd935",
      "tree": "50461a3d34d431a7d748dd1a3c295136772d7de4",
      "parents": [
        "d684952fa7ae29feb9fde33363d20d746137dedb"
      ],
      "author": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Thu Apr 22 16:35:51 2021 +0800"
      },
      "committer": {
        "name": "Alex Hong",
        "email": "rurumihong@google.com",
        "time": "Thu Apr 22 16:35:51 2021 +0800"
      },
      "message": "Set the log callback earlier for showing system property set denials\n\nPropertyInit loads the build.prop files and set the system properties.\nSet the SELinux log callback before that to show the avc denials for debugging.\n\nTest: $ make init_system\n      Push this module and ensure system property set denials are shown during boot\nBug: 185920634\nChange-Id: Ifc228985a990f6938ad2a93790eb3607b2d12b5a\n"
    },
    {
      "commit": "6b7311fc99b72bbc18c77282e2a3b52880c8326f",
      "tree": "e3f6d6b9c95519e7bf7cf07c502d541fc90fe1e8",
      "parents": [
        "007d7941c82563f27decf2f0a951c1c402f31433"
      ],
      "author": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Fri Apr 02 12:36:20 2021 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Fri Apr 02 17:00:50 2021 -0700"
      },
      "message": "Use property ro.product.enforce_debugfs_restrictions to enable debugfs\nrestrictions\n\nUse the property ro.product.enforce_debugfs_restrictions to enable\ndebugfs restrictions instead of checking the launch API level. Vendors\ncan enable build-time as well as run-time debugfs restrictions by\nsetting the build flag PRODUCT_SET_DEBUGFS_RESTRICTIONS true which in\nturn sets ro.product.enforce_debugfs_restrictions true as well enables\nsepolicy neverallow restrictions that prevent debugfs access. The\nintention of the build flag is to prevent debugfs dependencies from\ncreeping in during development on userdebug/eng builds.\n\nTest: build and boot\nBug: 184381659\nChange-Id: If555037f973e6e4f35eb7312637f58e8360c3013\n"
    },
    {
      "commit": "6c01baf075b6c9de1939afca86b6069355348710",
      "tree": "72ccceb084e22be7c19e6f76f60e262bc952691b",
      "parents": [
        "9865e47e1e652946f5d5c871fd20427ff20a969d"
      ],
      "author": {
        "name": "Devin Moore",
        "email": "devinmoore@google.com",
        "time": "Tue Mar 09 13:49:59 2021 -0800"
      },
      "committer": {
        "name": "Devin Moore",
        "email": "devinmoore@google.com",
        "time": "Tue Mar 09 13:56:25 2021 -0800"
      },
      "message": "init: check for verifiedbootstate in properties\n\nThis check in export_oem_lock_status happens after PropertyInit() so\nall of the ro.boot.* properties will be set. There is no need to import\nthe kernel cmdline again.\n\nTest: build and boot cuttlefish\nBug: 173815685\nChange-Id: I5df7c0105566d4617442dbb8e77eb26e465775f1\n"
    },
    {
      "commit": "08c862fa003875cf464730c24e1b81b261f8b474",
      "tree": "81cfe51f208654e9a9e6cfa032e53f4e2cb32a88",
      "parents": [
        "8c164946d8522fa50ea03e08af38c3b352329fe0"
      ],
      "author": {
        "name": "Lisa Liu",
        "email": "liulisa@google.com",
        "time": "Wed Feb 03 18:22:21 2021 +0800"
      },
      "committer": {
        "name": "Lisa Liu",
        "email": "liulisa@google.com",
        "time": "Fri Feb 19 15:59:04 2021 +0800"
      },
      "message": "init: ro.boottime.init.modules\n\nAdd a property ro.boottime.init.modules to provide kernel modules\nloading time in milliseconds. Also add corresponding log to show in init\nlog along with loaded module count.\n\nTest: boot test\nBug: 178143513\nChange-Id: I77e3939c2a271da6841350a8c2a34ad32f637377\n"
    },
    {
      "commit": "03e803455e68571d70abf1d8f0676afd2cadb8bb",
      "tree": "0fad719ef35b1e493fa579fa8ec2edae44b72f92",
      "parents": [
        "cb9e1decf0d57e0f4b22b4b05fd25276b74fd82e"
      ],
      "author": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Tue Feb 09 07:42:48 2021 +0000"
      },
      "committer": {
        "name": "Akilesh Kailash",
        "email": "akailash@google.com",
        "time": "Tue Feb 09 22:45:29 2021 +0000"
      },
      "message": "libsnapshot: No transition of snapuserd during second stage init\n\nWhen there is a transition of daemon from selinux stage, we observe\nintermittent hangs during OTA. This is a workaround wherein\nwe don\u0027t do the transition and allow the daemon to continue which\nwas spawned during selinux stage.\n\nBug: 179331261\nTest: Incremental OTA, full OTA on pixel\nSigned-off-by: Akilesh Kailash \u003cakailash@google.com\u003e\nChange-Id: I622a0ed8afcd404bac4919b1de00728de2c12eaf\n"
    },
    {
      "commit": "eedd38a82a419987be43ce41b330c50cf986b5cb",
      "tree": "435dc3bfdf40bffed8da6a79ad07c38adbbd1b0e",
      "parents": [
        "3ce24b87a26ebb26536f2ad9cb37bac34b9d7772"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 05 11:10:00 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 05 11:10:00 2021 -0800"
      },
      "message": "Let the kernel hwrng thread manage hw_random mixing.\n\nThis has been something the kernel does automatically since 2014, so\nthere\u0027s no obvious reason to add extra work during boot to duplicate\nthat effort.\n\nBug: http://b/179086242\nTest: treehugger\nChange-Id: I44cce99a892e4f2a6a303c2126bd29f955f5fb23\n"
    },
    {
      "commit": "8376d87e2da39b9a3fe1034f3ce0a5ecbc4d6369",
      "tree": "5b6a372bc629cb6227c1bd46edda8597535049e8",
      "parents": [
        "bedae3910ce7caae50781a986453a64cafb1047a",
        "fb921a1c4e48ad16af868ffa3a0fd0b02c4faa4c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 13 04:24:22 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 13 04:24:22 2021 +0000"
      },
      "message": "Merge \"Let init mount/unmount debugfs for non-user builds\""
    },
    {
      "commit": "fb921a1c4e48ad16af868ffa3a0fd0b02c4faa4c",
      "tree": "122635d2eab494b13ca13bf4d066431b65378ed1",
      "parents": [
        "5266e041ef19acadb6d90f43892fe39ab8336251"
      ],
      "author": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Sat Sep 12 15:37:57 2020 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Tue Jan 12 14:41:53 2021 -0800"
      },
      "message": "Let init mount/unmount debugfs for non-user builds\n\nThis change will help non-user builds with keeping debugfs\ndisabled during run time. Instead, debugfs will be mounted by init\nto enable boot time initializations to set up vendor debug data\ncollection and unmounted after boot. It will be also be mounted by\ndumpstate for bug report generation and unmounted after.\n\nThis change is only intended to help vendors (who depend on debugfs to\ncollect debug information from userdebug/eng builds) keep debugfs\ndisabled during runtime. Platform code must not depend on debugfs at all.\n\nTest: manual\nBug: 176936478\nChange-Id: I2e89d5b9540e3de094976563682d4b8c5c125876\n"
    },
    {
      "commit": "491e4da3720b24d7db4536733fac3604ba3f67dc",
      "tree": "83391c258637acb3665fbd9dcf71be5360554778",
      "parents": [
        "5266e041ef19acadb6d90f43892fe39ab8336251"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Dec 08 00:21:20 2020 -0800"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Jan 08 16:39:51 2021 -0800"
      },
      "message": "init: Add an selinux transition for snapuserd.\n\nWith compressed VAB updates, it is not possible to mount /system without\nfirst running snapuserd, which is the userspace component to the dm-user\nkernel module. This poses a problem because as soon as selinux\nenforcement is enabled, snapuserd (running in a kernel context) does not\nhave access to read and decompress the underlying system partition.\n\nTo account for this, we split SelinuxInitialize into multiple steps:\n\nFirst, sepolicy is read into an in-memory string.\n\nSecond, the device-mapper tables for all snapshots are rebuilt. This\nflushes any pending reads and creates new dm-user devices. The original\nkernel-privileged snapuserd is then killed.\n\nThird, sepolicy is loaded from the in-memory string.\n\nFourth, we re-launch snapuserd and connect it to the newly created\ndm-user devices. As part of this step we restorecon device-mapper\ndevices and /dev/block/by-name/super, since the new snapuserd is in a\nlimited context.\n\nFinally, we set enforcing mode.\n\nThis sequence ensures that snapuserd has appropriate privileges with a\nminimal number of permissive audits.\n\nBug: 173476209\nTest: full OTA with VABC applies and boots\nChange-Id: Ie4e0f5166b01c31a6f337afc26fc58b96217604e\n"
    },
    {
      "commit": "959ea63b30d927103f00743308caf558a6ba9e63",
      "tree": "89d6849942bb7b34133db9ffcbcef6ca4bdcdd5d",
      "parents": [
        "77692aeea28a0781c0c918673ece565c28f15643"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Dec 10 07:34:29 2020 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Dec 10 07:34:29 2020 -0800"
      },
      "message": "init: remove DumpShutdownDebugInformation()\n\nThis hasn\u0027t helped investigating the issue, and the issue itself isn\u0027t\na problem anymore, so we remove these logs.\n\nBug: 155203339\nTest: reboot\nChange-Id: I20e51d8fcad5572906a8d556bec8a8dee4522834\n"
    },
    {
      "commit": "1d57fb839de219e16ec108c8f35152a0350a0d76",
      "tree": "6724a2dd60eed9206858953f2d90d5edde6c478d",
      "parents": [
        "32f281d77a9faea65afa4f216a9ffc595e0319f1"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Sun Nov 22 00:25:36 2020 -0800"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Sun Nov 22 13:51:15 2020 -0800"
      },
      "message": "init: Fix ordering of second-stage snapuserd transition.\n\nRunning snapuserd before early-init means ueventd is missing, which\nmeans we can\u0027t use WaitForFile() when dm-user misc devices are created.\nFix this by starting the transition after early-init.\n\nBug: 173476209\nTest: full OTA with VABC applies and boots\nChange-Id: Ice594cceb44981ae38deb82289d313c14726c36b\n"
    },
    {
      "commit": "b031def229aaa3e1fcd304e5fb7ad85dab61b829",
      "tree": "0ff3b1a2f7ff148211d89aba115feb3b496c8188",
      "parents": [
        "f57fd97df39adeac7bd58d57ed6d8297ee0bfd10"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Oct 30 00:00:33 2020 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Nov 02 13:24:06 2020 -0800"
      },
      "message": "Start snapuserd if needed as soon as possible during second-stage init.\n\nsnapuserd is used as a user-space block device implementation during\nVirtual A/B Compression-enabled updates. It has to be started in\nfirst-stage init, so that updated partitions can be mounted.\n\nOnce init reaches second-stage, and sepolicy is loaded, we want to\nre-launch snapuserd at the correct privilege level. We accomplish this\nby rebuilding the device-mapper tables of each block device, which\nallows us to re-bind the kernel driver to a new instance of snapuserd.\nAfter this, the old daemon can be shut down.\n\nIdeally this transition happens as soon as possible, before any .rc\nscripts are run. This minimizes the amount of time the original\nsnapuserd is running, as well as any ambiguity about which instance of\nsnapuserd is the correct one.\n\nThe original daemon is sent a SIGTERM signal once the transition is\ncomplete. The pid is stored in an environment variable to make this\npossible (these details are implemented in libsnapshot).\n\nBug: 168259959\nTest: manual test\nChange-Id: Ife9518e502ce02f11ec54e7f3e6adc6f04d94133\n"
    },
    {
      "commit": "a68ee762f7083a7ba320bf716e4d96ebad0beeaa",
      "tree": "ac6d060079831919831a145f68364f5157f86a6d",
      "parents": [
        "909219ccc294fe61582f3c3da953a176a3d16e82"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Oct 06 16:58:19 2020 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Oct 15 13:12:52 2020 -0700"
      },
      "message": "Load boot image props.\n\nThis change does the following:\n\n- Create /second_stage_resources empty dir at root.\n- At runtime:\n  - At first stage init:\n    - mount tmpfs to /second_stage_resources.\n    - Copy /system/etc/ramdisk/build.prop to\n      /second_stage_resources/system/etc/ramdisk/build.prop\n  - At second stage init:\n    - Load prop from the above path\n    - umount /second_stage_resources\n\nTest: getprop -Z\nTest: getprop\nBug: 169169031\n\nChange-Id: I18b16aa5fd42fa44686c858982a17791b2d43489\n"
    },
    {
      "commit": "f7c2585f6d6a24f504df1d66db0b87e4bb5b9395",
      "tree": "9afabf315879e84a7b496f98b470618d6ed5b40a",
      "parents": [
        "17ed9c4fb636c31dfb4b5d739ef451efc1be01ee"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Aug 07 10:11:48 2020 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Aug 07 10:44:14 2020 +0900"
      },
      "message": "Fix the order for boot scripts scanning\n\nTo support \"override\" services, we need to scan partitions from least\nspeicific to most specific.\n\nBug: 163021585\nTest: m\nChange-Id: I26a6de4f7fb571c60038e803137a4b1c237792fd\n"
    },
    {
      "commit": "d36f4a36ed84ee108f41f13f1c66d58e79d636e9",
      "tree": "955131d765d47b43a4bd0b9f835ffe7021b00966",
      "parents": [
        "dfdc9b105a5a2d5ea926021eb14de7d02797950f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 23 09:13:37 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 23 09:13:37 2020 -0700"
      },
      "message": "init: set $PATH in second stage init\n\nIf the system partition has been updated and _PATH_DEFPATH has a new\nvalue, then we must set $PATH in second stage init to take on the new\nvalue, as well as having set it in first stage init.\n\nBug: 160210288\nTest: build\nChange-Id: I18765709dc9bff9379b0ae39272199cf74a79d2f\n"
    },
    {
      "commit": "30bbf7d0ad1b24b419edfc29e2d47da2db3664ca",
      "tree": "9a02477a35d329617fb8fd238a7d0ec3566d5335",
      "parents": [
        "b88a97b41ef29524cb3f9e30d21d32618069784e"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Mon Jul 06 15:26:49 2020 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Jul 07 15:50:58 2020 -0700"
      },
      "message": "Boost init priority before main loop\n\nNow we have more things e.g. loading kernel modules, initialize\nselinux. And before all these, system cannot make further progress. It\nshould be beneficial to boost this critical peroid in init.\n\nBenchmark on a Pixel device shows this saves 100+ms on early boot\n\nToT release + This CL (P15538587)\nD/BaseBootTest: init_stage_second_START_TIME_avg : 1563.4\nD/BaseBootTest: ueventd_Coldboot_avg : 219.0\nD/BaseBootTest: action_init_/system/etc/init/hw/init.rc:114_START_TIME_avg : 2103.7\n\nToT release (6654154)\nD/BaseBootTest: init_stage_second_START_TIME_avg : 1639.0\nD/BaseBootTest: ueventd_Coldboot_avg : 238.2\nD/BaseBootTest: action_init_/system/etc/init/hw/init.rc:114_START_TIME_avg : 2226.0\n\nBug: 143857500\nBug: 147997403\nBug: 160271169\nBug: 160696502\nTest: Boottime\nSigned-off-by: Wei Wang \u003cwvw@google.com\u003e\nChange-Id: I21c9e051f4ae3e953d991c031f151b2779702548\n"
    },
    {
      "commit": "150687b87d61cf3f07083a77b0fee38f21a84c68",
      "tree": "2d574c7348afbd2ea58c7c0d8d636cc38dee30f5",
      "parents": [
        "5133bbfd3412cb2dc30d07149736ad1ec5779979"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue May 12 18:13:14 2020 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed May 13 17:56:31 2020 -0700"
      },
      "message": "init: failed to set sys.usb.controller\n\nWith GKI we find in certain situations the timing of the drivers\nloading is delayed as compared to a monolithic kernel.  This\nintroduces a race where during second stage init, the attributes\ninside /sys/class/udc/ might not be set by the time\nSetUsbController() is called.\n\nTo address this, we also call SetUsbController() until the property\nsys.usb.controller is set at the bottom of the event loop.\n\nSigned-off-by: Mark Salyzyn \u003csalyzyn@google.com\u003e\nBug: 151950334\nTest: make sure user space fastbootd comes up reliably for a GKI kernel\nChange-Id: Iececd8ffa3e6641554d215d622d8dab72d85d34d\n"
    },
    {
      "commit": "1c8413514409cb3078f7cba8cfcaedb46f1954d0",
      "tree": "37977b4b9600fe90ff9f6ac0430870aa08fdc86f",
      "parents": [
        "e3e77d382fd1e1dbb2acb777658064e78be94237"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Apr 28 17:45:26 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 29 09:01:53 2020 -0700"
      },
      "message": "init: add even more debugging information for reboot\n\nThere are devices stuck waiting for vendor_init to finish a command,\nwithout giving much more information.  Instead of setting aside the\nlast run command, it\u0027s more valuable to store and dump the last 30\nlogs seen.\n\nBug: 155203339\nTest: these logs appear during hung reboots\nTest: normal reboots have no difference.\nChange-Id: I99cae248eb81eaf34ef66b910fa653a9fa135f68\n"
    },
    {
      "commit": "e3e77d382fd1e1dbb2acb777658064e78be94237",
      "tree": "e02bdc0dc531e7c32bd8dfb34f98899fd08d3fbe",
      "parents": [
        "91fd50c78f862bdb5c0ea08b08c60c1aa67b71de"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Apr 28 13:55:19 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Apr 28 14:03:25 2020 -0700"
      },
      "message": "init: fix restarting of subcontext\n\nWhen the subcontext code was redone to allow only one subcontext\n(vendor_init), the code for restarting it and for terminating it\nduring shutdown was not updated, resulting in it not working.\n\nBug: 155203339\nTest: kill subcontext init and notice it restart\nTest: subcontext init stops during shutdown\nChange-Id: Ib77f59d1e7be0ffcfd3f31c8450dc022c20bb322\n"
    },
    {
      "commit": "080fa98815beb08947b8e4ff2c9ff937d1e6a55d",
      "tree": "993be602dcc6ddada59eaf1a7967e8adc5543ecc",
      "parents": [
        "22d634884539ee7995e214a7dccbdad238049f95"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Mar 27 14:31:08 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Mar 27 14:39:16 2020 -0700"
      },
      "message": "init: even better logging around subsequent sys.powerctl messages\n\nBug: 150863651\nTest: add delays during critical parts of shutdown and see the\n      expected debug information\nChange-Id: Ida586903fd3eefc32ca9ee34ea2db037896ed9f4\n"
    },
    {
      "commit": "22d634884539ee7995e214a7dccbdad238049f95",
      "tree": "046e6f5b61dc006805a0d5a4ea7b9d6d34a11841",
      "parents": [
        "68855276a1781cc1d7fbb636c035acd8dd21f62a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Mar 27 14:08:20 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Mar 27 14:08:20 2020 -0700"
      },
      "message": "init: do not handle control messages after shutdown\n\nWe already stop queue\u0027ing new control messages, but we forgot to stop\nhandling those control messages that are already queued.  This CL\nfixes that.\n\nBug: 150863651\nTest: CF reboots appropriately\nChange-Id: Ifea07a30b868de23eb735db10d8bae410e1b98bb\n"
    },
    {
      "commit": "40463336a88eba61208b5c2b3c54f4eacc03bfbc",
      "tree": "98bf37ec7c3b8433c2726388594b10731bbccff1",
      "parents": [
        "919678bcbe30643f2092a50b5cdb19265477570f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 26 20:32:17 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Mar 27 08:08:52 2020 -0700"
      },
      "message": "init: use an eventfd instead of socketpair to wake the main loop\n\neventfd is a more suitable mechanism.\n\nBug: 150863651\nTest: boot CF, ctl.start services, reboot CF\nChange-Id: Ie5c3b0c048afdd7afa4bfc4cba26bec3225925e5\n"
    },
    {
      "commit": "975bfe11460b04f8e49e0d6f3fb086c1ed28ee48",
      "tree": "5a3c1e25509b169026ff9a52d30133d7bb8fc0c1",
      "parents": [
        "fc51af215b03eaa712e564ab66a338479703a013"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 24 18:17:53 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 26 20:50:35 2020 +0000"
      },
      "message": "init: add missing TEMP_FAILURE_RETRY\n\nBug: 150863651\nTest: boot\nMerged-In: I09e86e08a716c2c2933e090d57818a9aad6486f8\nChange-Id: I09e86e08a716c2c2933e090d57818a9aad6486f8\n"
    },
    {
      "commit": "1c688365acc8b88079a7692df8f5faee9afa1be2",
      "tree": "2eee9ceac61cefffaef1f73bdcbefdc3e7213484",
      "parents": [
        "447a1ead217d7993c2a97cdf516b21756bdea1e5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 24 18:00:23 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 24 18:01:50 2020 -0700"
      },
      "message": "init: add more logging around reboots\n\nParticularly in the case of the device failing to reboot.  Some test\ndevices are showing that they\u0027ve received the reboot message but\nwithout rebooting.\n\nBug: 150863651\nTest: prevent init from handling reboot and see a stacktrace\nTest: reboot works normally\nChange-Id: Ide001dadbb9e9cd235ea509066e6ae6664bb429b\n"
    },
    {
      "commit": "bdbf5047c9ab42d689c5a8e5d99b3437e1f98d76",
      "tree": "d8fd359ad0c4789e9272feb96f9da7f9f02406ee",
      "parents": [
        "3ab681c9a8a7de8b7f004b9e6afec749cdcbd5e5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Mar 04 10:52:08 2020 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 19 12:54:25 2020 -0700"
      },
      "message": "init: add ctl.oneshot_on/ctl.oneshot_off\n\nSome services are lazy HALs on some platforms and not lazy HALs on\nothers; this is known at runtime by hwservicemanager, so this change\nadds these properties to allow hwservicemanager to turn one oneshot\n(for lazy HALs).  It may also be required to make a lazy HAL not lazy\nanymore, and oneshot_off is provided for this.\n\nBug: 147841742\nTest: new unit test that turn on and off oneshot on a service (bootanim)\n      and observes that it follows the expected behavior\nChange-Id: I79524e2c9a5008f90c8d3bc40920fde00602a439\n"
    },
    {
      "commit": "fd470e87cc5920cde00c83e653a52c83cecbb04d",
      "tree": "202e2dcdc36c3edb606e54cc1071e1bf0d596cf1",
      "parents": [
        "01c8eccca3f7c7ed9f08fdc7bb641ab40ac833d1"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 16 10:17:05 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 16 10:31:34 2020 -0700"
      },
      "message": "init: use a no-op signal handler instead of SIG_IGN for SIGPIPE\n\nWe want to ignore SIGPIPE within init, but if we use SIG_IGN, that\nwould be inherited by child processes through exec(), which we do not\nwant to have happen.  We instead set up a real signal handler with a\nno-op handler function, that will ignore SIGPIPE within init, but will\nnot be inherited across exec().\n\nThis fixes c29c2baa6907 (\"init: Add support for native service\nregistration with lmkd\"), when SIG_IGN was introduced.\nNote that we caught this issue before shipping a release with that\nchange, so the major motivation here is to not cause a behavior change\nin init.\n\nBug: 151581751\nTest: children of init that don\u0027t explicitly block SIGPIPE exit when\n      sent SIGPIPE\nTest: children of init that do explicitly block SIGPIPE do not exit\n      when sent SIGPIPE\nTest: init does not exit when sent SIGPIPE\nTest: init exits when sent SIGABRT\nChange-Id: Ieda8555fd03836bcd672a422fe673a8369ad9beb\n"
    },
    {
      "commit": "802864c7826ea79f8cc29c52801e08bcfc15db76",
      "tree": "568d89f9584df78d22dc81d24ee46959314d7db5",
      "parents": [
        "a964a96ae73cd332084d1e80c5ccec6176ee17fa"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 12 14:29:25 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 12 17:15:07 2020 -0700"
      },
      "message": "init: handle property messages asynchronously #2\n\nA previous change moved property_service into its own thread, since\nthere was otherwise a deadlock whenever a process called by init would\ntry to set a property.  This new thread, however, would send a message\nvia a blocking socket to init for each property that it received,\nsince init may need to take action depending on which property it is.\nUnfortunately, this means that the deadlock is still possible, the\nonly difference is the socket\u0027s buffer must be filled before init deadlocks.\n\nThis change, therefore, adds the following:\n1) A lock for instructing init to reboot\n2) A lock for waiting on properties\n3) A lock for queueing new properties\n\nA previous version of this change was reverted and added locks around\nall service operations and allowed the property thread to spawn\nservices directly.  This was complex due to the fact that this code\nwas not designed to be multi-threaded.  It was reverted due to\napparent issues during reboot.  This change keeps a queue of processes\npending control messages, which it will then handle in the future.  It\nis less flexible but safer.\n\nBug: 146877356\nBug: 148236233\nBug: 150863651\nBug: 151251827\nTest: multiple reboot tests, safely restarting hwservicemanager\nChange-Id: Ice773436e85d3bf636bb0a892f3f6002bdf996b6\n"
    },
    {
      "commit": "832f9f1dbd2fd6f33f27622d7fd51e4a92534b31",
      "tree": "36c73f90e61028db5529d886c139109e38065d25",
      "parents": [
        "459ca0be74ca58a3b221750dfcac7e856f906667"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 10 11:47:24 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 10 11:53:11 2020 -0700"
      },
      "message": "Revert \"init: handle property service callbacks asynchronously\"\n\nThis is apparently causing problems with reboot.\n\nThis reverts commit 7205c6293341c82701e849fa29cfab66916d1052.\n\nBug: 150863651\nTest: build\nChange-Id: Ib8a4835cdc8358a54c7acdebc5c95038963a0419\n"
    },
    {
      "commit": "14ce87c7daf96abf7bed653b58f59a15644d0862",
      "tree": "685d1b4a3624426ccaf35d23bde53337f869a3a6",
      "parents": [
        "81f46d954bbc48a83118d50db7bd2b0500e0fa0d",
        "2e1c6b26a1fe4799b830c2a6d536afd44c718491"
      ],
      "author": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Wed Mar 04 09:16:47 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 04 09:16:47 2020 +0000"
      },
      "message": "Merge \"Refine the exported DSU status\""
    },
    {
      "commit": "50dfcb02c8afe8b71963ed1103abb115517dcb1f",
      "tree": "18faf354aa08e8ef22e583b04ade645babef06c9",
      "parents": [
        "ad9d034e7d7c6b2be93cf5fe5e64556b685de6d2"
      ],
      "author": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Fri Feb 28 20:39:40 2020 +0900"
      },
      "committer": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Sat Feb 29 05:57:04 2020 +0000"
      },
      "message": "Fix missing Result::ok() call in init\n\nTest: m init\nChange-Id: Ifc11f856704e6f8d08764b6ba2876423992fb8c2\n"
    },
    {
      "commit": "2e1c6b26a1fe4799b830c2a6d536afd44c718491",
      "tree": "98882cf4e74d0316760e8688cf7121717e11e134",
      "parents": [
        "f2e5b4bade77e7ce16a4e0ed91376c1a852de565"
      ],
      "author": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Tue Feb 25 16:31:10 2020 +0800"
      },
      "committer": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Thu Feb 27 16:34:30 2020 +0800"
      },
      "message": "Refine the exported DSU status\n\nThe new exported DSU status removes the need to make blocking binder\ncalls out of system server during device boot.\n\nBug: 149790245\nBug: 149716497\nTest: adb shell am start-activity \\\n    -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \\\n    -a android.os.image.action.START_INSTALL \\\n    -d file:///storage/emulated/0/Download/system.raw.gz \\\n    --el KEY_SYSTEM_SIZE $(du -b system.raw|cut -f1) \\\n    --el KEY_USERDATA_SIZE 8589934592\nChange-Id: I27fae316214498407a73474ca8b93aec3518e4b5\n"
    },
    {
      "commit": "7205c6293341c82701e849fa29cfab66916d1052",
      "tree": "782c50fb0af8d6fab50b0a04789863b893d78c5e",
      "parents": [
        "a2f9136b2c54a2ab5224e217548a274db2a91478"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jan 29 14:09:24 2020 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Feb 20 14:58:06 2020 -0800"
      },
      "message": "init: handle property service callbacks asynchronously\n\nA previous change moved property_service into its own thread, since\nthere was otherwise a deadlock whenever a process called by init would\ntry to set a property.  This new thread, however, would send a message\nvia a blocking socket to init for each property that it received,\nsince init may need to take action depending on which property it is.\nUnfortunately, this means that the deadlock is still possible, the\nonly difference is the socket\u0027s buffer must be filled before init deadlocks.\n\nThere are possible partial solutions here: the socket\u0027s buffer may be\nincreased or property_service may only send messages for the\nproperties that init will take action on, however all of these\nsolutions still lead to eventual deadlock.  The only complete solution\nis to handle these messages asynchronously.\n\nThis change, therefore, adds the following:\n1) A lock for instructing init to reboot\n2) A lock for waiting on properties\n3) A lock for queueing new properties\n4) A lock for any actions with ServiceList or any Services, enforced\n   through thread annotations, particularly since this code was not\n   designed with the intention of being multi-threaded.\n\nBug: 146877356\nBug: 148236233\nTest: boot\nTest: kill hwservicemanager without deadlock\nChange-Id: I84108e54217866205a48c45e8b59355012c32ea8\n"
    },
    {
      "commit": "cecebbbaccd36dc2e9f6e80c8e91e57d979963a5",
      "tree": "e866ec8f6bd1eafcc47a7f26d5b957ad787dcfdc",
      "parents": [
        "a6bc86aae72e406c1e90ff25eb3f95b654d9a723"
      ],
      "author": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Thu Feb 06 03:49:33 2020 +0900"
      },
      "committer": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Thu Feb 06 17:04:27 2020 +0000"
      },
      "message": "Convert system/core to Result::ok()\n\nNo functionality changes, this is a mechanical cleanup.\n\nTest: m\nTest: cd system/core \u0026\u0026 atest\nChange-Id: Ifdaa3ce1947ed578f656d5a446978726eb416c36\n"
    },
    {
      "commit": "44d5ec37a76e8a53f2111d9e5e15439fffb93d1a",
      "tree": "5a9c1fb9e21a3e4a4604cbba283de63381d7bfa0",
      "parents": [
        "838b1a1f94fcfa53cb4b971df581fbbbabe9a9eb"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jan 31 08:33:36 2020 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jan 31 08:33:36 2020 -0800"
      },
      "message": "init: handle process actions when waiting for exec services\n\nWe currently do not handle process actions (restarting services or\nexiting timedout services) when we are waiting for an exec service,\nbut this seems to be the wrong behavior.  Particularly, an exec\nservice may depend on a previously started service and if that service\ncrashes, we will deadlock unless init restarts it.\n\nBug: 146920034\nTest: build, boot\nChange-Id: Id2fc936b8a7b989862ba4c32c398a544941e0e76\n"
    },
    {
      "commit": "f0f7e701861896b2ad87f82a58c9cb8d8baa78fd",
      "tree": "0d91c2a348b2a1948c553a79c9de63878a8923e2",
      "parents": [
        "acd17330dfb2b1700815f0f37a7fb0124736e426"
      ],
      "author": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Tue Jan 14 22:02:53 2020 +0000"
      },
      "committer": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Wed Jan 15 20:58:15 2020 +0000"
      },
      "message": "init: add builtin check for perf_event LSM hooks\n\nHistorically, the syscall was controlled by a system-wide\nperf_event_paranoid sysctl, which is not flexible enough to allow only\nspecific processes to use the syscall. However, SELinux support for the\nsyscall has been upstreamed recently[1] (and is being backported to\nAndroid R release common kernels).\n[1] https://github.com/torvalds/linux/commit/da97e18458fb42d7c00fac5fd1c56a3896ec666e\n\nAs the presence of these hooks is not guaranteed on all Android R\nplatforms (since we support upgrades while keeping an older kernel), we\nneed to test for the feature dynamically. The LSM hooks themselves have\nno way of being detected directly, so we instead test for their effects,\nso we perform several syscalls, and look for a specific success/failure\ncombination, corresponding to the platform\u0027s SELinux policy.\n\nIf hooks are detected, perf_event_paranoid is set to -1 (unrestricted),\nas the SELinux policy is then sufficient to control access.\n\nThis is done within init for several reasons:\n* CAP_SYS_ADMIN side-steps perf_event_paranoid, so the tests can be done\n  if non-root users aren\u0027t allowed to use the syscall (the default).\n* init is already the setter of the paranoid value (see init.rc), which\n  is also a privileged operation.\n* the test itself is simple (couple of syscalls), so having a dedicated\n  test binary/domain felt excessive.\n\nI decided to go through a new sysprop (set by a builtin test in\nsecond-stage init), and keeping the actuation in init.rc. We can change\nit to an immediate write to the paranoid value if a use-case comes up\nthat requires the decision to be made earlier in the init sequence.\n\nBug: 137092007\nChange-Id: Ib13a31fee896f17a28910d993df57168a83a4b3d\n"
    },
    {
      "commit": "99df54be933edf07d7949ab55c25685a00dfef43",
      "tree": "209c33ac1f060626434f85a21a11117e85a397b4",
      "parents": [
        "1fd9c5568999d333630225071801f3e6bb905d7e"
      ],
      "author": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Fri Nov 22 16:14:10 2019 +0900"
      },
      "committer": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Mon Dec 09 19:45:11 2019 +0900"
      },
      "message": "Move linker config under /linkerconfig\n\nCurrently linker config locates under /dev, but this makes some problem\nin case of using two system partitions with chroot. To match system\nimage and configuration, linker config better stays under /linkerconfig\n\nBug: 144966380\nTest: m -j passed \u0026\u0026 tested from cuttelfish\nChange-Id: Iaae5af65721eee8106311c1efb4760a9db13564a\n"
    },
    {
      "commit": "abd504611b28443e5201f831d6b516bc10b34bdd",
      "tree": "ea326445e25a8c75d9f9078fbf84202802ee23d9",
      "parents": [
        "dde59c32ac2fffe4542d7edb2d0ad84abbc95177",
        "091c4d143975f9e268e5b3aac1923cc68e7781d2"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Dec 06 02:35:41 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 06 02:35:41 2019 +0000"
      },
      "message": "Merge \"Remove service defined in an APEX during userspace reboot\""
    },
    {
      "commit": "091c4d143975f9e268e5b3aac1923cc68e7781d2",
      "tree": "4097d6e4dc3a312d9aa34b2ab69935f253a328b0",
      "parents": [
        "028e1d4434dd8c3d4f429a402dcdf66a6c552eb0"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Dec 05 12:35:19 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Dec 05 17:51:43 2019 +0000"
      },
      "message": "Remove service defined in an APEX during userspace reboot\n\nSuch services will be re-parsed and added back to the service list\nduring post-fs-data stage.\n\nTest: adb reboot userspace\nTest: atest CtsInitTestCases\nBug: 145669993\nBug: 135984674\nChange-Id: Ibb393dfe0f101c4ebe37bc763733fd5d981d3691\n"
    },
    {
      "commit": "c88d8f93cfaa8cbf368a0fa94e8bc84bc55c3ece",
      "tree": "3caaa75251230d98f2b21dadd9b8892c2442c976",
      "parents": [
        "f7a6c4587f06bc7e79748acd97dc4dd5b741f328"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 19 15:21:25 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Dec 04 15:43:21 2019 -0800"
      },
      "message": "init: Replace property_set() with android::base::SetProperty()\n\nInit is no longer a special case and talks to property service just\nlike every other client, therefore move it away from property_set()\nand to android::base::SetProperty().\n\nIn doing so, this change moves the initial property set up from the\nkernel command line and property files directly into PropertyInit().\nThis makes the responsibilities between init and property services\nmore clear.\n\nTest: boot, unit test cases\nChange-Id: I36b8c83e845d887f1b203355c2391ec123c3d05f\n"
    },
    {
      "commit": "18278d2e9ccb9e7fdb8391055c56d1b35b3e39a6",
      "tree": "cc46ed78a58235f4a011f535f8f4eaa53f8a3ee2",
      "parents": [
        "e91c76b2104792d839b2bd3036e7e265427dcdc1"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 12 16:21:20 2019 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 13 12:41:34 2019 -0800"
      },
      "message": "init: make triggering shutdown from vendor_init better\n\nPreviously, we assumed that TriggerShutdown() should never be called\nfrom vendor_init and used property service as a back up in case it\never did.  We have since then found out that vendor_init may indeed\ncall TriggerShutdown() and we want to make it just as strict as it is\nin init, wherein it will immediately start the shutdown sequence\nwithout executing any further commands.\n\nTest: init unit tests, trigger shuttdown from init and vendor_init\nChange-Id: I1f44dae801a28269eb8127879a8b7d6adff6f353\n"
    },
    {
      "commit": "47cdf6c078767a1b62a4d6dbf371449b5ae67c99",
      "tree": "8a7e436f7af19b1db72dfd81cf440b4fa381c707",
      "parents": [
        "563a73e7f760808ff0cea4443f1b91a27c7d435e",
        "c9f5353ad369fadf5464b889a25b613f69808c4b"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 13 14:36:47 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 13 14:36:47 2019 +0000"
      },
      "message": "Merge \"Move init and ueventd scripts from / to /system/etc\""
    },
    {
      "commit": "c9f5353ad369fadf5464b889a25b613f69808c4b",
      "tree": "e0950fd099986cffa278ec25ee0314f98e23d1b7",
      "parents": [
        "7f44a83d8f389393292449d52d0b2550d751adac"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Nov 04 10:30:36 2019 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Nov 08 10:15:49 2019 -0800"
      },
      "message": "Move init and ueventd scripts from / to /system/etc\n\nThere is no reason for these scripts to continue to exist in /, when\nthey are better suited for /system/etc.  There are problems keeping\nthem at / as well, particularly that they cannot be updated with\noverlayfs.\n\nBug: 131087886\nBug: 140313207\nTest: build/boot\nMerged-In: I043d9a02ba588ca37ceba2c4e28ed631792b2586\nChange-Id: I043d9a02ba588ca37ceba2c4e28ed631792b2586\n"
    },
    {
      "commit": "c29c2baa6907a2f4c0a4efca9fa41fc5474ec1c4",
      "tree": "1c5a37c465cba55fca2bb83294363f4eed2c1e87",
      "parents": [
        "e353d8642ce6b77711dd443e9b4433a03dced92a"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Tue Oct 22 17:18:42 2019 -0700"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Thu Nov 07 18:19:31 2019 +0000"
      },
      "message": "init: Add support for native service registration with lmkd\n\ninit should be able to register native services with lmkd so that they\ncan be killed when needed. Only processes with oom_score_adjust not\nequal to the default -1000 will be registered with lmkd because with the\nscore that low the process is unkillable anyway.\nInform lmkd when a registered process is killed so that the record can be\nremoved.\nChange init.rc to start lmkd during init phase so that it is there to\nregister other services.\nReplace hardcoded oom_score_adj values with appropriate definitions.\n\nBug: 129011369\nTest: boot and verify native service registration\nChange-Id: Ie5ed62203395120d86dc1c8250fae01aa0b3c511\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "0dbfea7b0778bff25a43602e523deae5bb65b114",
      "tree": "108d52a6da321b7bec78f8c7acec47343b0c4de8",
      "parents": [
        "6b0e789a21cfb796a508e3c5507e49a2e8571582"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Oct 11 13:18:44 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Oct 11 13:45:42 2019 -0700"
      },
      "message": "init: trigger shutdown directly from builtins\n\nEspecially now that property_service is a thread, there may be some\ndelay between when init sets sys.powerctl and when the main thread of\ninit receives this and triggers shutdown.  It\u0027s possible that\noutstanding init commands are run during this gap and that is not\ndesirable.\n\nInstead, have builtins call TriggerShutdown() directly, so we can be\nsure that the next action that init runs will be to shutdown the\ndevice.\n\nTest: reboot works\nTest: reboot into recovery due to bad /data works\nChange-Id: I26fb9f4f57f46c7451b8b58187138cfedd6fd9eb\n"
    },
    {
      "commit": "ba6968e63618ab5e37d3fb163e9ea27dc0aa3247",
      "tree": "76b1ee0d67fbc509eec1ff62f4f6fc264f4c3a7f",
      "parents": [
        "f2098870c11249aee09ba8d52b23cca6b864dc1b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Oct 07 16:26:33 2019 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Tue Oct 08 12:16:06 2019 +0100"
      },
      "message": "Add a skeleton of userspace reboot\n\nThis CL only draws boundaries between userspace and full reboots, and\nadds some functionality that will be required for userspace reboot:\n\n* Whenever device is shutting down is now controlled in reboot.cpp,\n  since during userspace reboot this state can change.\n* Now it\u0027s also possible to restart handling of control messages inside\n  property service. In case of userspace reboot, init will restart it\n  after stopping post-data services.\n* New userspace-reboot-requested trigger is added similar to shutdown\n  one for full reboot.\n\nTest: adb reboot\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: Id55a53ba781d2b90ce40449037b6d8d47e72c476\n"
    },
    {
      "commit": "14c2472734ce9f92978b7193a6877c5c2ceba200",
      "tree": "4390ac8fa516766511a10c6742ca0bb17ada90ab",
      "parents": [
        "b0321c1de178ac2dfd05fb6537e0e63f7eecf87e"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 18 13:47:19 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 18 14:02:14 2019 -0700"
      },
      "message": "init: degeneralize subcontext init into only vendor_init\n\nThis code is more generic than it needs to be and one of the side\neffects is that an extra init process is forked for odm_init, despite\nit having the same context as vendor_init.  I don\u0027t think anything is\ngoing to change regarding that soon, so this change stops forking that\nextra process to save its memory and simplifies the code overall.\n\nBug: 141164879\nTest: init still uses vendor_init for vendor_scripts\nTest: init unit tests\nTest: init only has one subcontext process\nChange-Id: I0d224455604a681711e32f89fb20132378f69060\n"
    },
    {
      "commit": "f3a5ab8b1d814706784b261cd3cdfa877346a1e9",
      "tree": "8cf30fe4a4cf5eea624bb360467ebdeb115ff040",
      "parents": [
        "e5e9ee41d9de64db195095c2ed7a2474c2374a34",
        "4e6bf2510f635fc0fb046eeda8a0a1d5a96a0412"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 17 20:21:09 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 17 20:21:09 2019 +0000"
      },
      "message": "Merge \"Remove the global seccomp option.\""
    },
    {
      "commit": "60971e6ce22bd4fee531dc72875acb4b913f69a7",
      "tree": "aa80b358efb90ac48551640a81e29dc0d52aefad",
      "parents": [
        "6f735df0d1268cc976e5834c3cb1cc9e6fe9395d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 10:40:47 2019 -0700"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 13 16:48:35 2019 +0100"
      },
      "message": "init: add reboot_on_failure service option\n\nThis replaces the recently added `exec_reboot_on_failure` builtin, since\nit\u0027ll be cleaner to extend service definitions than extending `exec`.\nThis is in line with what we decided when adding `exec_start` instead\nof extending `exec` to add parameters for priority.\n\nTest: `exec_start` a service with a reboot_on_failure option and watch\n      the system reboot appropriately when the service is not found and when\n      the service terminates with a non-zero exit code.\n\nChange-Id: I332bf9839fa94840d159a810c4a6ba2522189d0b\n"
    },
    {
      "commit": "4e46a33c70c50940b19e37af7b99924f559b8542",
      "tree": "78ed479609281bf3e45c2a2ee2731fa127f9a71b",
      "parents": [
        "483c2f90598aedfcdedd120fcce26ab7c39989a4",
        "1ab3dfcab469198114c4bb4a3914c6b64b891f72"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 17:04:57 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 10 17:04:57 2019 +0000"
      },
      "message": "Merge \"Reland^2: \"init: run property service in a thread\"\""
    },
    {
      "commit": "1ab3dfcab469198114c4bb4a3914c6b64b891f72",
      "tree": "7e8fb97277f79767cb4f473b22f1173011c3d149",
      "parents": [
        "50e408db2d1bd015f87996f98b0bc21a39402ab0"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 22 17:46:37 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 05 14:42:58 2019 -0700"
      },
      "message": "Reland^2: \"init: run property service in a thread\"\n\nIt\u0027s been a long standing issue that init cannot respond to property\nset messages when it is running a builtin command.  This is\nparticularly problematic when the commands involve IPC to vold or\nother daemons, as it prevents them from being able to set properties.\n\nThis change has init run property service in a thread, which\neliminates the above issue.\n\nThis change may also serve as a starting block to running property\nservice in an entirely different process to better isolate init from\nhandling property requests.\n\nReland: during reboot, init stops processing property_changed messages\nfrom property service, since it will not act on these anyway.  This\nhad an unexpected effect of causing future property_set calls to block\nindefinitely, since the buffer between init and property_service was\nfilling up and the send() call from property_service would then\nblock.  This change has init tell property_service to stop sending it\nproperty_changed messages once reboot begins.\n\nTest: CF boots, walleye boots, properties are set appropriately\nChange-Id: I26902708e8be788caa6dbcf4b6d2968d90962785\n"
    }
  ],
  "next": "4e6bf2510f635fc0fb046eeda8a0a1d5a96a0412"
}
