)]}'
{
  "log": [
    {
      "commit": "0a112d52f8d31718c7a2813d7f77811a2ef2f36e",
      "tree": "d1335e3c85aef9a71ae23a0f13804df68d67183a",
      "parents": [
        "ebd6a0f3094e4c56336e2e4e1b1afd9027247671",
        "8ac68188acc876da135a74fe3835c8e11c347e4a"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sat Aug 29 01:42:13 2020 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Sat Aug 29 01:42:13 2020 -0700"
      },
      "message": "Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)\n\nBug: 166295507\nMerged-In: Id18cb0e2d2f3e776a42b566c4a1af2e250890896\nChange-Id: Iba7cab32ab3aa6f47952c840ff6dc8492e8d0704\n"
    },
    {
      "commit": "c0d11aa73a71484777443ec3ebde13b7d032c78b",
      "tree": "9afe6e07d8522a7446d5c4f87aa26dc88be1dfea",
      "parents": [
        "58c10b77305115de45822157918392881e691da6",
        "8c92256df5880072f950adc28891398dce7ffe3a"
      ],
      "author": {
        "name": "Gavin Corkery",
        "email": "gavincorkery@google.com",
        "time": "Wed Aug 26 21:47:19 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 26 21:47:19 2020 +0000"
      },
      "message": "Merge \"Store userspace reboot info in /metadata\""
    },
    {
      "commit": "8c92256df5880072f950adc28891398dce7ffe3a",
      "tree": "476ddb80bc7e603e933ed5063535ced280bca300",
      "parents": [
        "3447cdc741214db36f47dd1138b12215a070efa6"
      ],
      "author": {
        "name": "Gavin Corkery",
        "email": "gavincorkery@google.com",
        "time": "Mon May 11 14:10:09 2020 +0100"
      },
      "committer": {
        "name": "Gavin Corkery",
        "email": "gavincorkery@google.com",
        "time": "Fri Aug 21 17:32:34 2020 +0100"
      },
      "message": "Store userspace reboot info in /metadata\n\nStore pertinent information about userspace reboot events in the case\nof failure. This information is any services which failed to stop\ncleanly, the output of the default fstab and /proc/mounts, and\na list of mounts which failed to unmount. This information is only\nstored as necessary (i.e. mount information will not be stored if\neverything unmounted, even if some services failed to stop).\n\nAdded new /metadata/userspacereboot directory to persist this\ninformation. Information older than 3 days will be deleted.\n\nTest: adb reboot userspace with sigterm/sigkill timeouts set to\n      very low values\nTest: Manual test of storing all other information\nBug: 151820675\nChange-Id: I6cfbfae92a7fc6f6c984475cad2c50c559924866\n"
    },
    {
      "commit": "64697dcd89b58cc94dd42da4eeebf8df4cd78ae1",
      "tree": "ce71255b6d38890a07c2f82833be75eacd4310e4",
      "parents": [
        "8124ee9930687fcdd8ed7b7cbe0a88cb113fd404",
        "d60f0708c9d7bb917305096bfe93278f851ae3d5"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Jun 13 21:14:03 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sat Jun 13 21:14:03 2020 +0000"
      },
      "message": "Merge \"Reboot sequence: Unmount active apexes before unmounting /data\" am: b255195375 am: d60f0708c9\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1327913\n\nChange-Id: Ie64a60f5a104ad22326e2d632b5cf30b2f489f42\n"
    },
    {
      "commit": "91a98487752b21269dd459623a29c0d48bd7bced",
      "tree": "c85aafe031d96dfffd1cdf01543755ba73dbe035",
      "parents": [
        "7cc98e212b9e2bba4fc9c14b42995d3fd5fcbbd1"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Jun 10 00:53:59 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Jun 13 00:13:11 2020 +0100"
      },
      "message": "Reboot sequence: Unmount active apexes before unmounting /data\n\nHaving mounted apexes with loop back devices backing files on /data\npartition will prevent clean unmount of it. Unmounting them and tearing\ndown loop devices should minimize the risk of that.\n\nNote that it won\u0027t fix the issue completely, as there are a few (~2-3)\nprocesses that keep restarting even after SIGKILL is sent. Which means\nthat they can still hold references to apexes on /data partition. But\nin practice probability of this is quite low.\n\nTest: adb reboot\nTest: put tzdata apex in /data/apex/active \u0026\u0026 adb reboot\nBug: 158152940\nChange-Id: I4624567b3d0f304dba4c6e37b77abd89e57411de\n"
    },
    {
      "commit": "971add20228a761d0406e4f533b32cae6cf5f011",
      "tree": "8cd8369492926a675adf69fe9d6e717e2bba2d8c",
      "parents": [
        "f7228a8565fd6056ba1a5dfcaa82b6e1029cb101",
        "9b07c52de0f6e8cf0c356617f362c89896e931f2"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Jun 12 02:26:52 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Jun 12 02:26:52 2020 +0000"
      },
      "message": "Merge \"init: start ueventd in the default mount namespace\" am: 7cc98e212b am: 9b07c52de0\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1325695\n\nChange-Id: I8e29d81747b871f3e92c32c43d74f4fc6bdf8b85\n"
    },
    {
      "commit": "4f23d5a236e08ed2d9413cf2681f8ed967d01deb",
      "tree": "7bfcca78b214cafaf6d024269d07d0cc4a49831b",
      "parents": [
        "3447cdc741214db36f47dd1138b12215a070efa6"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue Jun 09 13:44:17 2020 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Thu Jun 11 15:10:40 2020 +0900"
      },
      "message": "init: start ueventd in the default mount namespace\n\nInit starts ueventd in the default mount namespace to support loading\nfirmware from APEXes.\n\nBug: 155023652\nTest: devices boots\n      adb$ nsenter -t (pid of ueventd) -m ls /apex\n      \u003d\u003e shows all APEXes\nChange-Id: Ibb8b33a07eb014752275e3bca4541b8b694dc64b\n"
    },
    {
      "commit": "860ba643930119c2a54b70184f234a5a2b5386e3",
      "tree": "4a4b849384912c19ec89e850f721476a55892bfd",
      "parents": [
        "dd0440f4e5979e022cebb7a788e9228205df091d"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Thu May 28 16:42:10 2020 +0200"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Thu May 28 19:11:07 2020 +0200"
      },
      "message": "Abort FUSE filesystems during shutdown.\n\nTo ensure we can shutdown cleanly, and don\u0027t hang an outstanding\nrequests to a FUSE host daemon that has already exited.\n\nBug: 153411204\nTest: inspect logs during shutdown\nChange-Id: I8e6479bd54dbc1fc85b087617aa6b16be9f15a3b\n"
    },
    {
      "commit": "8fb6e3fdaf6bd965153024ed5bc06753f92dbbc8",
      "tree": "b155cf8b869663b94a2199abc1073b1795c8891b",
      "parents": [
        "c00d57d35383f4ab32547b6f53544c94ab19f052"
      ],
      "author": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Fri May 08 16:26:56 2020 +0800"
      },
      "committer": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Mon May 11 14:50:27 2020 +0000"
      },
      "message": "InitFatalReboot: Trigger panic explicitly for init_fatal_panic\n\nThe exit of init panics the system *after* process context (mm, stack,\n...etc.) are recycled, according to Linux kernel\u0027s \u0027do_exit\u0027\nimplementation. To preserve most init process context for debugging,\ntriggers the panic via proc-sysrq explicitly.\n\nNote: after this change, there will be no \"Attempt to kill init\" panic\nwhen androidboot.init_fatal_panic is set.\n\nTest: Insert data abort fault in init, the full process context is\n      preserved in memory dump captured after panic.\nBug: 155940351\nChange-Id: I3393bd00f99b8cb432cfa19a105b7d636b411764\n(cherry picked from commit be1cf9006ab91e77114c19b8f596f8141d8e0b84)\n"
    },
    {
      "commit": "be1cf9006ab91e77114c19b8f596f8141d8e0b84",
      "tree": "cf619836b3b88918926be11c472972c01cad6ac8",
      "parents": [
        "d427b54c535d3f56e9db947efa4878346541f890"
      ],
      "author": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Fri May 08 16:26:56 2020 +0800"
      },
      "committer": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Sat May 09 01:30:32 2020 +0800"
      },
      "message": "InitFatalReboot: Trigger panic explicitly for init_fatal_panic\n\nThe exit of init panics the system *after* process context (mm, stack,\n...etc.) are recycled, according to Linux kernel\u0027s \u0027do_exit\u0027\nimplementation. To preserve most init process context for debugging,\ntriggers the panic via proc-sysrq explicitly.\n\nNote: after this change, there will be no \"Attempt to kill init\" panic\nwhen androidboot.init_fatal_panic is set.\n\nTest: Insert data abort fault in init, the full process context is\n      preserved in memory dump captured after panic.\nBug: 155940351\nChange-Id: I3393bd00f99b8cb432cfa19a105b7d636b411764\n"
    },
    {
      "commit": "39d4553fee9f61b946e0dda08a5f1f82f534196d",
      "tree": "542af1a95990b05519b375bad0e8c9b09951db20",
      "parents": [
        "8bb2b3f2adf97a1f429002f8d8b7695d7be68671"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 30 22:37:15 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri May 01 13:27:14 2020 +0100"
      },
      "message": "Add reason why userspace reboot shutdown sequence failed\n\nTest: atest CtsUserspaceRebootHostSideTestCases\nBug: 154772075\nMerged-In: I7e4674c474189b0185c020e3e066aea5678d7428\nChange-Id: I7e4674c474189b0185c020e3e066aea5678d7428\n(cherry picked from commit a4e83ad3d7147f1168c55d8da60304666221208d)\n"
    },
    {
      "commit": "a4e83ad3d7147f1168c55d8da60304666221208d",
      "tree": "dabb0f0194ca2ddd40d8b57f425a18f77df85b06",
      "parents": [
        "08929cc389bbaebaf2594bc1897bc0b3980f9664"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 30 22:37:15 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 30 22:37:15 2020 +0100"
      },
      "message": "Add reason why userspace reboot shutdown sequence failed\n\nTest: atest CtsUserspaceRebootHostSideTestCases\nBug: 154772075\nChange-Id: I7e4674c474189b0185c020e3e066aea5678d7428\n"
    },
    {
      "commit": "a3be996673cc876bf6d8b5f7678541614b08c7db",
      "tree": "fae6f8187b068a528c658a715ce56d0515354667",
      "parents": [
        "10f8f5e363c36530d6743c3230fa56cf08db6646"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 16 21:37:03 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Apr 17 12:28:25 2020 +0100"
      },
      "message": "Cleanup logic in KillZramBackingDevice\n\nSince this function is used in userspace reboot, we need to be more\ndiligent with error handling, e.g.:\n\n* If init fails to read /sys/block/zram0/backing_dev, then fail and\nfallback to hard reboot.\n* Always call swapoff.\n* Always reset zram.\n* Tear down loop device only if zram is backed by a loop device.\n\nTest: adb reboot userspace\nBug: 153917129\nChange-Id: I4709da1d08cf427ad9c898cfb2506b6a29f1d680\nMerged-In: I4709da1d08cf427ad9c898cfb2506b6a29f1d680\n(cherry picked from commit a840d405ebfbbbd18450f9a32933701dd417d3a4)\n"
    },
    {
      "commit": "a840d405ebfbbbd18450f9a32933701dd417d3a4",
      "tree": "58f467e4fcc930c0e072bd835b6e3b8eea57cf85",
      "parents": [
        "418f28dbe4540df2dbb770ff21ce3d4b0e2e9090"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 16 21:37:03 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Apr 16 21:37:03 2020 +0100"
      },
      "message": "Cleanup logic in KillZramBackingDevice\n\nSince this function is used in userspace reboot, we need to be more\ndiligent with error handling, e.g.:\n\n* If init fails to read /sys/block/zram0/backing_dev, then fail and\nfallback to hard reboot.\n* Always call swapoff.\n* Always reset zram.\n* Tear down loop device only if zram is backed by a loop device.\n\nTest: adb reboot userspace\nBug: 153917129\nChange-Id: I4709da1d08cf427ad9c898cfb2506b6a29f1d680\n"
    },
    {
      "commit": "6236af3d0c6422bbc88aa883ebdb717352d69ad4",
      "tree": "e72ba38106216ea7e6c9384439068e0beb095ce5",
      "parents": [
        "d4cc15499b6fbc42ab8f70991480f6a16182b890"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Apr 11 01:55:24 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Tue Apr 14 00:21:41 2020 +0100"
      },
      "message": "Fallback to hard reboot if userspace reboot hasn\u0027t started in time\n\nSimilarly to other recovery mechanisms, timeout is controlled by a\nread-only property that can be configured per-device.\n\nTest: adb root\nTest: adb shell setprop init.userspace_reboot.started.timeoutmillis 2\nTest: adb reboot userspace\nBug: 152803929\nChange-Id: Id70710b46da798945ac5422ef7d69265911ea5ef\nMerged-In: Id70710b46da798945ac5422ef7d69265911ea5ef\n(cherry picked from commit d05535485f7a818cda3bfa4b61bfd071be56b36f)\n"
    },
    {
      "commit": "d05535485f7a818cda3bfa4b61bfd071be56b36f",
      "tree": "4b39c3dffc2412f52ad88e87b0ddc8d31c4cc50e",
      "parents": [
        "acf0bebcf92351b3ff2fe1d3cc200717151d727c"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Apr 11 01:55:24 2020 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Apr 11 01:59:17 2020 +0100"
      },
      "message": "Fallback to hard reboot if userspace reboot hasn\u0027t started in time\n\nSimilarly to other recovery mechanisms, timeout is controlled by a\nread-only property that can be configured per-device.\n\nTest: adb root\nTest: adb shell setprop init.userspace_reboot.started.timeoutmillis 2\nTest: adb reboot userspace\nBug: 152803929\nChange-Id: Id70710b46da798945ac5422ef7d69265911ea5ef\n"
    },
    {
      "commit": "6288212ac3e1f81133b61a3635e78e2fd8af7b85",
      "tree": "6d4dc65cb94fed8eb769b5e5af89bce63488a2a8",
      "parents": [
        "9fd393f4307ce2cdf0f4ecf2cf463f77e4974707"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 31 16:31:37 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Apr 02 12:51:36 2020 -0700"
      },
      "message": "init: don\u0027t sync() before shutting down services\n\nDevices in the lab are hitting an issue where they\u0027re getting stuck\nlikely in the sync() call in DoReboot() before we start the reboot\nmonitor thread and before we shut down services.\n\nIt\u0027s possible that concurrent writing to RW file systems is causing\nthis sync() call to take essentially forever.  To protect against\nthis, we need to remove this sync().  Note that we will still call\nsync() after shutting down services.\n\nNote that the service shutdown code has a timeout and there is a\nreboot monitor thread that will shutdown the device if more than 30\nseconds pass above that timeout.  This change increases that timeout\nto 300 seconds to give the final sync() calls explicitly more time to\nfinish.\n\nBug: 150863651\nTest: reboot functions normally\nTest: put an infinite loop in DoReboot and the the reboot monitor thread\n      triggers and shuts down the device appropriately\nMerged-In: I6fd7d3a25d3225081388e39a14c9fdab21b592ba\nChange-Id: I6fd7d3a25d3225081388e39a14c9fdab21b592ba\n(cherry picked from commit 10615eb3973a9d7cf9e15b3c8a23907f15021200)\n"
    },
    {
      "commit": "10615eb3973a9d7cf9e15b3c8a23907f15021200",
      "tree": "70ac61c56acb3189b3f531a1131811b87873f02a",
      "parents": [
        "db22f23dd325fe11103d7c8a4304bde179b8b5c7"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 31 16:31:37 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 31 18:59:23 2020 -0700"
      },
      "message": "init: don\u0027t sync() before shutting down services\n\nDevices in the lab are hitting an issue where they\u0027re getting stuck\nlikely in the sync() call in DoReboot() before we start the reboot\nmonitor thread and before we shut down services.\n\nIt\u0027s possible that concurrent writing to RW file systems is causing\nthis sync() call to take essentially forever.  To protect against\nthis, we need to remove this sync().  Note that we will still call\nsync() after shutting down services.\n\nNote that the service shutdown code has a timeout and there is a\nreboot monitor thread that will shutdown the device if more than 30\nseconds pass above that timeout.  This change increases that timeout\nto 300 seconds to give the final sync() calls explicitly more time to\nfinish.\n\nBug: 150863651\nTest: reboot functions normally\nTest: put an infinite loop in DoReboot and the the reboot monitor thread\n      triggers and shuts down the device appropriately\nChange-Id: I6fd7d3a25d3225081388e39a14c9fdab21b592ba\n"
    },
    {
      "commit": "f0ab5b17f6b145c7ea25fd4f90b3ae1c0472ca14",
      "tree": "875b40140fe1cfc195e40d5de59bed3f7390b6ab",
      "parents": [
        "5eb308766eb36328bf990f841300bb3c711c1e5b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Mar 25 00:06:51 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Mar 25 21:40:45 2020 +0000"
      },
      "message": "Use properties for various userspace reboot timeouts\n\nTest: adb reboot userspace\nBug: 146560409\nChange-Id: I435e4f93a8769ff7d30cf781e0b48fa3e96121ef\nMerged-In: I435e4f93a8769ff7d30cf781e0b48fa3e96121ef\n(cherry picked from commit 7b41a1558d003084f201c361c8a4f12058f533a9)\n"
    },
    {
      "commit": "7b41a1558d003084f201c361c8a4f12058f533a9",
      "tree": "68a99daa9c98f1dd1a5a0f2c583e105b8f21fca7",
      "parents": [
        "89650f9692f3f693154de1c8a8a542424cad71cf"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Mar 25 00:06:51 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Mar 25 17:46:13 2020 +0000"
      },
      "message": "Use properties for various userspace reboot timeouts\n\nTest: adb reboot userspace\nBug: 146560409\nChange-Id: I435e4f93a8769ff7d30cf781e0b48fa3e96121ef\n"
    },
    {
      "commit": "0c19d6c99f6c312bcab4df1dcf78d8635829f313",
      "tree": "67d5db6219c516b6daebc66d40daf4083f89b830",
      "parents": [
        "0188274148f1462bfdc1c95457a44e2458fffa5a"
      ],
      "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": "Mon Mar 16 09:21:18 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\nMerged-In: Ice773436e85d3bf636bb0a892f3f6002bdf996b6\nChange-Id: Ice773436e85d3bf636bb0a892f3f6002bdf996b6\n(cherry picked from commit 802864c7826ea79f8cc29c52801e08bcfc15db76)\n"
    },
    {
      "commit": "0188274148f1462bfdc1c95457a44e2458fffa5a",
      "tree": "6c415f45dd8584eff1817d2697000708fcd438a5",
      "parents": [
        "e4e0566e0268d13f6a23a87c946d235bd1fba57f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 10 09:08:02 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 16 09:20:22 2020 -0700"
      },
      "message": "Revert \"init: handle property service callbacks asynchronously\"\n\nThis is apparently causing problems with reboot.\n\nThis reverts commit d2dab830d3ec260ccd982d147d4eb0ef74071261.\n\nBug: 150863651\nTest: build\nMerged-In: Ib8a4835cdc8358a54c7acdebc5c95038963a0419\nChange-Id: Ib8a4835cdc8358a54c7acdebc5c95038963a0419\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": "d2dab830d3ec260ccd982d147d4eb0ef74071261",
      "tree": "18eaa8d330c678fc354361223929f374528b9701",
      "parents": [
        "eb04526a1e933cd15920048ebc1c9ba1de96f448"
      ],
      "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": "Mon Mar 02 11:08:50 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\nMerged-In: I84108e54217866205a48c45e8b59355012c32ea8\nChange-Id: I84108e54217866205a48c45e8b59355012c32ea8\n(cherry picked from commit 7205c6293341c82701e849fa29cfab66916d1052)\n"
    },
    {
      "commit": "284d0cf7463882ce05e51ceae25c31d29a532d37",
      "tree": "f7c4d5d4de1b990dd421887db1d9fef978e72fee",
      "parents": [
        "caca3a9f5ad15c9a04408e69f611d45ebf42079b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Feb 27 20:46:27 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Sat Feb 29 13:18:39 2020 +0000"
      },
      "message": "Reset post_data_ and services_update_finished_ on userspace reboot\n\nTest: adb reboot userspace\nBug: 143970043\nChange-Id: I77d47a8460b1526337a318547a59141334e11cdd\nMerged-In: I77d47a8460b1526337a318547a59141334e11cdd\n(cherry picked from commit 3ad292025c022dac2139e5a33debf850df27a9af)\n"
    },
    {
      "commit": "dffbb4f14839a4ee6b7f570249f05b8d72fb7319",
      "tree": "b85735e6b6b2dc859b44d0e79ac5ded47c21ef11",
      "parents": [
        "c7177f4a5564d2873e8dd28a36edcc8c3d485f4e"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Feb 26 15:18:56 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Feb 28 11:40:10 2020 +0000"
      },
      "message": "If userspace reboot watchdog triggers, don\u0027t store reason in persistent property\n\nIf init is wedged, then the write will never succeed and reboot won\u0027t\nhappen.\n\nAlso, in case of normal reboot, move call to PersistRebootReason to the\ntop of DoReboot() function, to make sure we persist it even if /data is\nnot mounted.\n\nTest: builds\nTest: adb shell svc power reboot userspace\nTest: atest CtsUserspaceRebootHostSideTestCases\nBug: 148767783\nChange-Id: I4ae40e1f6fdc41cc0bcae57020fa3d3385dda1b4\nMerged-In: I4ae40e1f6fdc41cc0bcae57020fa3d3385dda1b4\n"
    },
    {
      "commit": "3ad292025c022dac2139e5a33debf850df27a9af",
      "tree": "998a10e12738f8a492a6b6e13737e4202335ff56",
      "parents": [
        "d485bbbb5117e58a0913c2c667647fa157dd7da3"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Feb 27 20:46:27 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Feb 27 20:46:27 2020 +0000"
      },
      "message": "Reset post_data_ and services_update_finished_ on userspace reboot\n\nTest: adb reboot userspace\nBug: 143970043\nChange-Id: I77d47a8460b1526337a318547a59141334e11cdd\n"
    },
    {
      "commit": "d485bbbb5117e58a0913c2c667647fa157dd7da3",
      "tree": "d2270d8cb40667693683a0f76a9f510edad0d662",
      "parents": [
        "2ddc5a19324e9bfc332f8065a208ab5203b5c216"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Feb 26 15:18:56 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Feb 27 13:06:37 2020 +0000"
      },
      "message": "If userspace reboot watchdog triggers, don\u0027t store reason in persistent property\n\nIf init is wedged, then the write will never succeed and reboot won\u0027t\nhappen.\n\nAlso, in case of normal reboot, move call to PersistRebootReason to the\ntop of DoReboot() function, to make sure we persist it even if /data is\nnot mounted.\n\nTest: builds\nTest: adb shell svc power reboot userspace\nTest: atest CtsUserspaceRebootHostSideTestCases\nBug: 148767783\nChange-Id: I4ae40e1f6fdc41cc0bcae57020fa3d3385dda1b4\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": "d0bc0b6f1e4f2547c0248e304e943b4a52caecfe",
      "tree": "4afd63209ad2861dddddc8c459492cb9ff9de88c",
      "parents": [
        "529605bc9ebaae7f63cef8a02f63a5fee5d2cbf3"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Feb 19 16:21:11 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Feb 19 20:12:07 2020 +0000"
      },
      "message": "Store reason in case of userspace-reboot watchdog reboot\n\nTest: adb reboot userspace\nBug: 148767783\nChange-Id: I58cf103fd5ce47eadae334376109492d0cc1c1c6\n"
    },
    {
      "commit": "ee016ce0b3cecde031c1d5463edcc1473b63bc39",
      "tree": "0b01b80c4c976d97be3f2e42789cef7bc179a51b",
      "parents": [
        "e6f2b7d884761cf67d2de2829216e52779a01e9c"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 23 10:00:34 2019 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 14 13:24:16 2020 -0800"
      },
      "message": "bootstat: enhance last reboot reason property with file backing\n\nHelps with support of recovery and rollback boot reason history, by\nalso using /metadata/bootstat/persist.sys.boot.reason to file the\nreboot reason.\n\nTest: manual\nBug: 129007837\nChange-Id: Id1d21c404067414847bef14a0c43f70cafe1a3e2\n"
    },
    {
      "commit": "15e4f6fe5a20cf2b955e3e887868713ee16b42c9",
      "tree": "9ed104cf6a35897a583f54c3853037c654285c83",
      "parents": [
        "1ac1d86b7d0fadbbe9bde3dd186fd0b48c3ba932",
        "85ff4ab9a408dfca36a2696aec2bc1476a82ecd7"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Feb 10 17:22:03 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 10 17:22:03 2020 +0000"
      },
      "message": "Merge \"Don\u0027t log userspace_reboot.started/finished properties from init\""
    },
    {
      "commit": "85ff4ab9a408dfca36a2696aec2bc1476a82ecd7",
      "tree": "1e18c43f57a782e7019d19d4474f2967c34a8fa6",
      "parents": [
        "62662cf189e56482cf42eccfe74f8812f76fd9bc"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Feb 06 23:33:42 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Feb 07 14:41:39 2020 +0000"
      },
      "message": "Don\u0027t log userspace_reboot.started/finished properties from init\n\nInstead they will be logged from system_server. This CL just prepares\ngrounds for logging CL to land.\n\nTest: adb reboot userspace\nBug: 148767783\nChange-Id: Ie9482ef735344ecfb0de8a37785d314a3c0417ff\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": "abe52dcb88f81ebe10a25cf23595406c175ac2e5",
      "tree": "5f81c8f5bfab35e86af5f2cdd5289d7ece6a7df2",
      "parents": [
        "d7c1bc73dc5b4e43b8288d43052a8b8890c4bf5a",
        "4a787d96ceda4981b53cade7270b9cb27017c840"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Jan 31 15:11:12 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 31 15:11:12 2020 +0000"
      },
      "message": "Merge \"Whitelist reboot reasons related to userspace reboot failure\""
    },
    {
      "commit": "764c1ac8ba71122695dac9cecb80a79cf99aace2",
      "tree": "a3a6d020782090b9381fcecbc1af1537f600b892",
      "parents": [
        "d66e442c21cf5d0b06524551f7bf5db94487033b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Jan 27 17:14:46 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Tue Jan 28 10:42:44 2020 +0000"
      },
      "message": "Trigger boot animation on userspace reboot\n\nAlso reset some more properties to make bootanimation work properly.\n\nTest: adb reboot userspace\nBug: 148172262\nChange-Id: I0154d4fe9377c019150f5b1a709c406925db584d\n"
    },
    {
      "commit": "4a787d96ceda4981b53cade7270b9cb27017c840",
      "tree": "3f46d04f29d75eb8171e6c6b7bd7c68c26fc1cd5",
      "parents": [
        "929c9e8b40fe6adb23a140a8584d69edb2cab636"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Jan 15 23:23:13 2020 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Jan 23 00:12:02 2020 +0000"
      },
      "message": "Whitelist reboot reasons related to userspace reboot failure\n\nTest: system/core/bootstat/boot_reason_test.sh\nBug: 135984674\nChange-Id: I31422329f1109273909293a83913ae801eb1fe52\n"
    },
    {
      "commit": "2c7c3c7402827addf47686099e990161072b49e8",
      "tree": "b3425e335ac0d65ba3f17060d49fb77a56f1faab",
      "parents": [
        "aceb837ced74592aa5f5a6cbfbfa7821712b2540"
      ],
      "author": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Thu Dec 26 21:55:08 2019 +0200"
      },
      "committer": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Fri Jan 03 18:03:04 2020 +0200"
      },
      "message": "init: Fix writing \"reboot recovery\" to BCB\n\nWhen BCB (bootloader message structure inside of misc partition) is\nmalformed (contains some non-printable characters in its fields),\n\"reboot recovery\" command won\u0027t be able to write required string to\n\"command\" field. It can happen for example when partition table was\ncreated anew and \u0027misc\u0027 partition area contains some garbage. Also this\nbehavior can be emulated with this command:\n\n    $ fastboot erase misc\n\nwhich leads to \u0027misc\u0027 partition to be filled with 0xFF characters. Hence\nthis code:\n\n    if (boot.command[0] \u003d\u003d \u0027\\0\u0027) {\n\nwon\u0027t let us to set new string to \"command\" field. Let\u0027s check if\n\"command\" field is malformed and fix it, before actually checking for\npreviously set content.\n\n\"fastboot erase\" shouldn\u0027t be used for testing purposes though, as it\ndoesn\u0027t work sometimes due to alignment, on bootloader side:\n\n    Erasing blocks 6144 to 6144 due to alignment\n    ........ erased 0 bytes from \u0027misc\u0027\n\nInstead one might use \"dd\" command to fill \u0027misc\u0027 with 0xFF\u0027s:\n\n    $ dd if\u003d/dev/zero ibs\u003d2k count\u003d1 | tr \"\\000\" \"\\377\" \u003emisc.img\n    $ fastboot flash misc misc.img\n\nTest: Fill \u0027misc\u0027 partition with 0xFF\u0027s, then do \"adb reboot recovery\"\nChange-Id: Ica8ca31012b9b2249645e7305830c07a20dd013c\nSigned-off-by: Sam Protsenko \u003csemen.protsenko@linaro.org\u003e\n"
    },
    {
      "commit": "018ddd7a6f0c176909af6c4f29d6cfea3b84c82b",
      "tree": "b36be601b435e9f939212ac588872ea30ad27426",
      "parents": [
        "5bc7941be3c3f566c6c3b5735d5e13437905f4f3"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Dec 20 16:34:48 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Dec 20 17:55:13 2019 +0000"
      },
      "message": "Unify logic for resetting properties before userspace reboot\n\nSince I was there, added two more properties to reset, and switched\nordering of sys.init.updatable_crashing and\nsys.init.updatable_crashing_process_name setprops to make sure that\nprocess name is already set when apexd/PackageWatchdog get\u0027s notified\nabout sys.init.updatable_crashing.\n\nAlso fixed a typo in what HandleUserspaceReboot function.\n\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: I954ec49aae0734cda1bd833ad68f386ecd808f73\n"
    },
    {
      "commit": "9f473c0579412fbb5de426b3156cae348191fee7",
      "tree": "77cc0186b044666d3c2de3727f8dd524df77abf5",
      "parents": [
        "264a37d12f6dbe325bd3ef73a2cc49437d3fbe1b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Dec 18 13:31:42 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Dec 18 18:06:47 2019 +0000"
      },
      "message": "Don\u0027t proceed with userspace reboot if device doesn\u0027t support it\n\nTest: set property to false and adb reboot userspace\nBug: 135984674\nChange-Id: I11e55243df002dd54e533a6b9fc529866597d4dd\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": "bee7b8c811483a6df9a14c9844b250c788239fc4",
      "tree": "19830bf01244ee7e2fc3d6475e1bfce69483d405",
      "parents": [
        "57d7bb695b644db0674c37a4d7114f9ec65867ed"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Dec 02 11:51:39 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Dec 02 11:59:51 2019 +0000"
      },
      "message": "Add basic support for remounting ext4 userdata into checkpoint\n\nMetadata encrypted ext4 userdata and v2 encryption keys will be\nsupported in follow up CLs.\n\nTest: adb shell /system/bin/vdc checkpoint startCheckpoint 1\nTest: adb reboot userspace\nBug: 135984674\nBug: 143970043\nChange-Id: I8dbf3bddd811cf54d3f2b2ee2c1ea64159d8c6e0\n"
    },
    {
      "commit": "57d7bb695b644db0674c37a4d7114f9ec65867ed",
      "tree": "a8d94918f325fe9feabffcdd63e2751fbe0d07ec",
      "parents": [
        "834e4751e64bfa94c7d5a7bd929070a1a5cf0fe4"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 28 18:25:24 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 28 18:25:24 2019 +0000"
      },
      "message": "Fix typo in userspace reboot watchdog\n\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: I4003683307a22e8d744748fb1311c16eb5ee1428\n"
    },
    {
      "commit": "23dbd6dc11a6e783d96b7447975bf50c4de45cb4",
      "tree": "0427d54fad983731aa0d8cadffef81124bad632a",
      "parents": [
        "dc4bd2714cf8a1ae4b606eafac56e12a0f77955e"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 14 01:21:24 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Nov 15 20:07:58 2019 +0000"
      },
      "message": "Make userspace_reboot.in_progress sysprop-as-api\n\nsys.init.userspace_reboot.in_progress will be used to notify all\nthe processes (including vendor ones) that userspace reboot is\nhappening, hence it should be treated as stable public api.\n\nAll other sys.init.userspace_reboot.* props will be internal to /system\npartition and don\u0027t require any stability guarantees.\n\nTest: builds\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: Ifb64a6bfae2de76bac67edea68df44e33c9cfe2d\n"
    },
    {
      "commit": "82a431eb2fadf7a99b1649e028aba8a5d85931db",
      "tree": "2a2a5b3d2c8d1d5af4972972972f4f6cfcd9ea9e",
      "parents": [
        "2ebe95ff2a69cb57ddd1be7da0de8a96835a9d0d"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 07 15:37:38 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 14 23:10:54 2019 +0000"
      },
      "message": "Add a very basic userspace reboot watchdog\n\nWatchdog is just a forked process that is going to fall back to the\nfull reboot in case device wasn\u0027t able to boot in given amount of time.\n\nCurrently this amount is hard-coded to 1 minute, but in the future it\nwill be controlled by a read-only property.\n\nAlso added sync calls before and after tearing down services.\n\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: Ie6053c9446a6761deae6dc104036bb35b09ef0e2\n"
    },
    {
      "commit": "c0df1874adf45fa962d76be1049fec8d445e3134",
      "tree": "50baab64511f155f3a083c352aefd9ecbb298a55",
      "parents": [
        "8e2f75e3192fe5b12516bc927e9c8f928c0c0849"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Nov 13 21:47:06 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 14 01:38:05 2019 +0000"
      },
      "message": "Add sysprops for start \u0026 end of userspace reboot\n\nThere will be useful in debugging/logging events to statsd.\n\nAlso as part of this CL, sys.init.userspace_reboot.in_progress property\nis now used as a mean of synchronization. It is set directly in\nDoUserspaceReboot, to make sure that all the setprop actions triggered\nby userspace-reboot-requested were processed.\n\nTest: adb reboot userspace\nTest: adb shell getprop sys.init.userspace_reboot.last_started\nTest: adb shell getprop sys.init.userspace_reboot.last_finished\nBug: 135984674\nChange-Id: I9debcd4f058e790855200d5295344dafb30e496a\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": "ab91ee986b603d0731579fffe7304b8e1c585add",
      "tree": "6136b5dfc6aa5949cf420e090a8f01dee51f3465",
      "parents": [
        "dbee3618be62ee3be275624edcbd4bf9d52dd832"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Nov 06 21:40:31 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Nov 07 02:13:38 2019 +0000"
      },
      "message": "userspace reboot: unmount apexes and switch to bootstrap namespace\n\nThis will bring device to the state closer to the one during normal boot\n\nBug: 135984674\nTest: adb install system/apex/shim/com.android.apex.cts.shim.v1.apex\nTest: adb reboot userspace\nTest: verified install succeeded\nChange-Id: I6ef73bde2ca817c8a62bf19b8f1895dd0d6d2829\n"
    },
    {
      "commit": "42697d3f1891bc87154069e4205a94226cbe941e",
      "tree": "9a3e8cb771758e8e1ee963844f26602c55b0a41a",
      "parents": [
        "2aabeed1fd68d119986146d74ffc6e5a7b9fdefa"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Tue Nov 05 23:04:17 2019 +0000"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Nov 06 20:12:08 2019 +0000"
      },
      "message": "Make remount into checkpointing for ext4 userdata a no-op\n\nWe are going to teamfood userspace reboot soon, and in order to gather\nas much data as possible we are fine with ignoring checkpointing for the\ndevices with ext4 (teamfood will be a very limited set of people that\nare aware what they\u0027ve signed for).\n\nAs result of this, we don\u0027t need to reset vold and kill zram backing\ndevice. Added a TODO to restore that functionality if needed.\n\nSince I was there, fixed yet another typo in userspace-reboot-resume -_-\n\nBug: 135984674\nTest: adb reboot userspace\nChange-Id: I2b7a93aaf738fe9bec9d606d7e11aefb325550b1\n"
    },
    {
      "commit": "8a603a7f9bad35ed99ec3e06b4a6b6180d50d8af",
      "tree": "a27d0222711287aed04a10bc64aa36bdc4a1e72d",
      "parents": [
        "f71ca37df449fab8c5ab52f565399bce88bfc876",
        "12a36076a75350154c3a5326da1f48e96ab6b94b"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Mon Oct 28 16:28:23 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 28 16:28:23 2019 +0000"
      },
      "message": "Merge \"Userspace reboot: Support remounting userdata for f2fs\""
    },
    {
      "commit": "12a36076a75350154c3a5326da1f48e96ab6b94b",
      "tree": "75da00797aa76368a72186008c323c0981669c93",
      "parents": [
        "7234df438ad9c15d2e4b3e6e56edd726c2b3bbbe"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Oct 23 20:11:32 2019 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Oct 25 16:27:10 2019 +0100"
      },
      "message": "Userspace reboot: Support remounting userdata for f2fs\n\nTest: adb reboot userspace\nTest: adb shell /system/bin/vdc startCheckpoint 1;\n      adb reboot userspace\nBug: 135984674\nChange-Id: I227f2c1cc18495d893decb2df5173fc7a7919df6\n"
    },
    {
      "commit": "e7ec8c81e4889e37022c5a4dc6682a05a60c1cf6",
      "tree": "26446a5a8f6d9ebb62fd33ad059a086d74438a09",
      "parents": [
        "81a0738c68406650fcdfe3dead6625fe88840537"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Oct 24 23:18:39 2019 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Oct 25 00:44:26 2019 +0100"
      },
      "message": "init/reboot.cpp: user lower_snake_case instead of camelCase\n\nAlso removed unused parameter from TryUmountAndFsck.\n\nTest: builds\nChange-Id: I1a892a0356afb08bf0680476ae1170ea568c65e2\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": "3f4b0d611338a772f63669bd12e792bbe43b1245",
      "tree": "d8efb7ccefa34881d7e2ab2021a7702149f5babd",
      "parents": [
        "d11c6f7fd8ab1cd747d48b086a008f653b77ca3f"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Wed Oct 09 15:23:02 2019 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Thu Oct 10 18:13:42 2019 +0100"
      },
      "message": "userspace reboot: stop post-data services and wait for them to be killed\n\n* Refactored code around stopping services a little bit to reuse it\n  between full reboot and userspace reboot.\n* Add a scope_guard to fallback to full reboot in case userspace reboot\n  fails.\n* In case of userspace reboot init will also wait for services to be\n  terminated/killed and log the ones that didn\u0027t react to\n  SIGTERM/SIGKILL in time.\n* If some of the services didn\u0027t react to SIGKILL, fail userspace reboot.\n\nTest: adb reboot userspace\nBug: 135984674\nChange-Id: I820c7bc406169333b0f929f0eea028d8384eb2ac\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": "3a803eb2d4451d884d2e79f5e624cb4e36873de6",
      "tree": "dddb41c8a0157e6c328331336bb21f4900800ba7",
      "parents": [
        "ff7d067ffadb3e7b6fea59c33a4c314a600faf09"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 25 16:23:50 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 26 10:29:57 2019 -0700"
      },
      "message": "Update init/fs_mgr for new logwrapper function\n\nTest: cuttlefish boots, fsck logs seen\nChange-Id: Icbc01161b44e097be813f4af648fa671739078b9\n"
    },
    {
      "commit": "2436e6b15a9f5f03392e942d9caa98ab69ed36d1",
      "tree": "60dbb1d904da040f61b263c999bdb9e7e12826aa",
      "parents": [
        "bac7609c48c4fbe3440caf7375eec37cfefc46c5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 19 11:16:19 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 19 14:05:56 2019 -0700"
      },
      "message": "init: reboot immediately if /data isn\u0027t mounted\n\nAll of the logic in reboot.cpp is meant to safely shutdown services,\nsafely unmount emulated RW file systems, then finally unmount the\nremaining RW file systems, particularly /data.  If /data hasn\u0027t been\nmounted, then none of this logic is required.\n\nRunning this logic caused a lock up when shutting down blueline from\nearly-init.  Vold, or potentially a related HAL, locked up during the\nShutdownVold() calls.  debuggerd separately locked up in the watchdog\nthread.\n\nTherefore, this change immediately reboots if /data is not mounted.\nIt also removes the lines to call into debuggerd.  debuggerd will not\nrun due to SELinux in any case, so it can only be used when hands-on\ndebugging a device.\n\nBug: 141082587\nTest: shutdown with /data mounted continues as normal\nTest: shutdown from early-init immediately shuts the device down\nChange-Id: I79c72346b17c7dfe57e955d9739bcaf559badc14\n"
    },
    {
      "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"
    },
    {
      "commit": "5e98b633a748695f1c838a79fc0bbf9c4859990d",
      "tree": "32ad9d3bac151ff9c2d1a339f3c97769a1db7851",
      "parents": [
        "137943d31b10ab2ec821b34bba7fc7a43961aa1b"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 12:48:28 2019 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Fri Jul 19 13:02:59 2019 -0700"
      },
      "message": "init: Write the reason in BCB on \"reboot recovery\"\n\nWithout this change \"adb reboot recovery\" leads to normal boot.\n\nBug: 137523800\nTest: peform factory reset, adb reboot recovery\nChange-Id: Ie791c8107d3434bf4ae6f5785b24e7d97921a7a9\n"
    },
    {
      "commit": "137943d31b10ab2ec821b34bba7fc7a43961aa1b",
      "tree": "45476a83ffd6b55fcaa14222149c5197a862cfea",
      "parents": [
        "97c06703f6cd899d62b83ba8c7d2b226ad12da95"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 18:00:33 2019 +0000"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 11:42:14 2019 -0700"
      },
      "message": "Revert \"init: Write the reason in BCB on \"reboot recovery\"\"\n\nThis reverts commit 4d35f2e59c7c599c4e9935714f3b18d58ef47b4f.\n\nReason for revert: b/137523800 This breaks factory reset on all devices (and potentially rescue party and non-ab updates). Because the init code unconditionally clear the arguments like \"--wipe_data\" written by framework; as a result, device boots into recovery without doing wipe. \n\nI guess one fix is to check the content of BCB, and skip the overwrite if it already boots into recovery. Revert the cl first to unblock p1, will submit the fix separately.\n\nChange-Id: Iccaf3dce6999005c2199490a138844d5a5d99e7f\n"
    },
    {
      "commit": "e7a010de01bfd94c16381215f82422e03003f549",
      "tree": "580c821d7a9f5481dfae5c1962c6956b30833399",
      "parents": [
        "5c296a0003d0d5079ab242aac2db7687d257e728",
        "4d35f2e59c7c599c4e9935714f3b18d58ef47b4f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 12 17:39:32 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 17:39:32 2019 +0000"
      },
      "message": "Merge \"init: Write the reason in BCB on \"reboot recovery\"\""
    },
    {
      "commit": "4d35f2e59c7c599c4e9935714f3b18d58ef47b4f",
      "tree": "a8918b720826b837891c4dd1aa46838cb689b0ba",
      "parents": [
        "6da50e319c159e276c6186b319c71b80a5d6998e"
      ],
      "author": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Wed Jul 10 19:02:25 2019 +0300"
      },
      "committer": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Thu Jul 11 11:25:28 2019 +0000"
      },
      "message": "init: Write the reason in BCB on \"reboot recovery\"\n\nWithout this change \"adb reboot recovery\" leads to normal boot.\n\nChange-Id: I361d0a1f6f6f2c57f3dc80102c21970b462c9b9c\nSigned-off-by: Sam Protsenko \u003csemen.protsenko@linaro.org\u003e\n"
    },
    {
      "commit": "d7931f114953124e37705ecf7b18f5cdd0cb447a",
      "tree": "eac69c8c9fc9cfdc70a1faa888d4e3c7ad0e709f",
      "parents": [
        "d543c8ca11d79f487a5c0e496faa57c961acf18c"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jul 10 10:33:09 2019 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jul 10 13:06:57 2019 -0700"
      },
      "message": "init: powerctl support and propagate longer canonical reboot reasons.\n\ninit: Received sys.powerctl\u003d\u0027reboot,userrequested,recovery,ui\u0027 ... (/system/bin/recovery)\ninit: powerctl: unrecognized command \u0027reboot,userrequested,recovery,ui\u0027\n\nTest: manual \u0026 boot_reason_test.sh\nBug: 63736262\nBug: 135078366\nBug: 133326470\nChange-Id: I931daf8dc4b74db5ee114c59ee215b1ba54bc31d\n"
    },
    {
      "commit": "2aeb1addeeb7cca6b8c6c266ad4770b1b9530f97",
      "tree": "c28ccbd08772a5db244bb8def9d9b4b16a2fcb1e",
      "parents": [
        "c0349199db745ee53e8d1133ddfce57fccc69cc7"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jun 26 10:46:20 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jun 26 13:45:07 2019 -0700"
      },
      "message": "Split out ServiceList and ServiceParser from service.cpp/.h\n\nThese always should have been in their own files.\n\nTest: build\nChange-Id: I201109b5ee63016e78901bbfd404846d45e1d4e6\n"
    },
    {
      "commit": "f4db2aad573d55a7a05782bfdfbb15b529e8ff11",
      "tree": "3a4acc033f81c91d62f7a477abc358a2674b3577",
      "parents": [
        "c47618662fd4829a187080a66c07e47893629ad8"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 14 14:54:02 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 14 22:07:32 2019 +0000"
      },
      "message": "init: use Errorf() now that we have it\n\nInit had some pretty horrid Error() \u003c\u003c StringPrintf(...) calls that\nare all much better replaced by Errorf(...) now.\n\nTest: build, check that keyword_map errors look correct\nChange-Id: I572588c7541b928c72ae1bf140b814acdef1cd60\n"
    },
    {
      "commit": "bbcbc2ffb339b2388e0cc282bb698fe436100b42",
      "tree": "3b1ab414d943a4a9b50dd29c581807fa2092ed06",
      "parents": [
        "caa95d551d7f3b86d609b09bb4ab98e2435f6bc8"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jun 10 11:08:01 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jun 10 12:39:18 2019 -0700"
      },
      "message": "init: replace Result\u003cSuccess\u003e with Result\u003cvoid\u003e\n\nNow that Result\u003cT\u003e is actually expected\u003cT, ...\u003e, and the expected\nproposal states expected\u003cvoid, ...\u003e as the way to indicate an expected\nobject that returns either successfully with no object or an error,\nlet\u0027s move init\u0027s Result\u003cSuccess\u003e to the preferred Result\u003cvoid\u003e.\n\nBug: 132145659\nTest: boot, init unit tests\nChange-Id: Ib2f98396d8e6e274f95a496fcdfd8341f77585ee\n"
    },
    {
      "commit": "9949ec5f5672a839937ed08dfc338494418cdb03",
      "tree": "e77c38fe273c25da47e3317f1afc92f1ecce97fb",
      "parents": [
        "691e0e154ad3d666bcd3fb6d21c563700a31ff2f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 16 16:54:49 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 22 15:23:01 2019 -0700"
      },
      "message": "init: replace Result\u003c\u003e with expected\u003c\u003e\n\nAndroid-base has an implementation of the future std::expected\u003c\u003e.\nThis provides the same baseline functionality as Result\u003c\u003e, so use it\ninstead of our own version.\n\nBug: 132145659\nTest: boot, init unit tests\nChange-Id: I11e61bcb5719b262a6420483ed51a762826a9e23\n"
    },
    {
      "commit": "aaddf282ecaedbe182a90d231b43ca8c68f03e23",
      "tree": "0919bc1d24bac78f13ec986a8151f99a03c98e0d",
      "parents": [
        "e7d0c83d3c5ca974d0fbdc61bf7fad8ccd5c1f83"
      ],
      "author": {
        "name": "josephjang",
        "email": "josephjang@google.com",
        "time": "Tue Apr 16 18:46:24 2019 +0800"
      },
      "committer": {
        "name": "josephjang",
        "email": "josephjang@google.com",
        "time": "Fri Apr 26 06:02:09 2019 +0800"
      },
      "message": "init: Add reboot timeout handler\n\nIn order to prevent device stuck at reboot, we try to create shutdownt\nmonitor thread with a timeout (default 30s). It will dump init process\nand blocked tasks call trace in last kmsg then trigger kernel panic to\nreboot device.\n\nTest: reboot device\n\nbug: 128561401\nChange-Id: Ieb400ab9fbd983544b61241a4f4b8aa2f4baa863\n"
    },
    {
      "commit": "5d7439ff5be06d74a05da1fb7986af0e4404c644",
      "tree": "8a8146853805db559bf69c38339ce650a8175cb5",
      "parents": [
        "4d30819263b280b3fd3c6fbdc2706d71847c72e7",
        "4f4caccefdd47d9d3ef98a0e1dacb8d00ff53a0a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jan 22 17:16:32 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 22 17:16:32 2019 +0000"
      },
      "message": "Merge \"Revert \"do not start shutdown animation from init\"\""
    },
    {
      "commit": "1945fbef1022cf41160304fba8fee37364e3b2f0",
      "tree": "bd14a3b041f000ccf5840ca8f757183aac366dd4",
      "parents": [
        "c541731521558ce8c4ccb33fa5d3c1502509bf91",
        "28a2c9213b526c90968267df98684baf7f44a93b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 17 22:06:50 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 17 22:06:50 2019 +0000"
      },
      "message": "Merge \"init: dump less debug logs when unmount timeout\""
    },
    {
      "commit": "2fdbdfddac11ce8914d93860f11f80c91cd211e9",
      "tree": "654aceea937ac5a0f9e585fea72db61eb78411e8",
      "parents": [
        "73992c7c000e3292c8c204a67e81609799e3c0e3",
        "2aedc82f021af961fb6f893b299aab25b5529dcf"
      ],
      "author": {
        "name": "Jaegeuk Kim",
        "email": "jaegeuk@google.com",
        "time": "Thu Jan 17 21:03:15 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 17 21:03:15 2019 +0000"
      },
      "message": "Merge \"zram: support zram_writeback\""
    },
    {
      "commit": "28a2c9213b526c90968267df98684baf7f44a93b",
      "tree": "5052a590de9a09d81e65caa001d0b16bcb8bb493",
      "parents": [
        "c8b83f3874cdef096b37e01ded8a15a47dbfa1c2"
      ],
      "author": {
        "name": "Jonglin Lee",
        "email": "jonglin@google.com",
        "time": "Tue Jan 15 16:38:44 2019 -0800"
      },
      "committer": {
        "name": "Jonglin Lee",
        "email": "jonglin@google.com",
        "time": "Thu Jan 17 19:14:46 2019 +0000"
      },
      "message": "init: dump less debug logs when unmount timeout\n\nDump only uninterruptible tasks instead of all tasks when\nunmount timeout. Also dump current CPU stack traces.\n\nBug: 122858312\nTest: Reboot with and without timeout\nChange-Id: I1412ace022b6d78e25fbe1337d1082d4be9c19c0\n"
    },
    {
      "commit": "df2faa4238776e2b30424ac01c84e9864149a139",
      "tree": "67494c802b5f31bd7af63c745b64a0680d90ba31",
      "parents": [
        "6410fd2434f2c20ceb43917dcf1cb62c3476529d"
      ],
      "author": {
        "name": "Randall Huang",
        "email": "huangrandall@google.com",
        "time": "Tue Jan 15 15:00:56 2019 +0800"
      },
      "committer": {
        "name": "YH_Lin",
        "email": "yhli@google.com",
        "time": "Wed Jan 16 16:19:24 2019 +0800"
      },
      "message": "reboot: only run fsck when detecting filesystem inconsistency\n\nRunning fsck when filesystem is in clean state is unnecessary\nand causes long shutdown duration.\n\nBug: 120575926\nTest: shutdown\nChange-Id: I0562bdad4ac2fb2dd3c9617f96ca3d6279876bd8\nSigned-off-by: Randall Huang \u003chuangrandall@google.com\u003e\n"
    },
    {
      "commit": "2aedc82f021af961fb6f893b299aab25b5529dcf",
      "tree": "74fb5f77292370c979afe6162f6a5d78e12de421",
      "parents": [
        "75e6ec7056d3fd14c7ff245abf81d95f64e24fae"
      ],
      "author": {
        "name": "Jaegeuk Kim",
        "email": "jaegeuk@google.com",
        "time": "Tue Nov 20 13:27:06 2018 -0800"
      },
      "committer": {
        "name": "Jaegeuk Kim",
        "email": "jaegeuk@google.com",
        "time": "Tue Jan 15 16:07:59 2019 +0000"
      },
      "message": "zram: support zram_writeback\n\nThis patch supports zram_writeback enabled by fstab in two ways.\n\ne.g.,\n/dev/block/zram0 none swap defaults\n    zramsize\u003d1073741824,max_comp_streams\u003d8,zram_loopback_path\u003d/data/unencrypted/zram_swap\n\n\u003d\u003d\u003e loopback size is 512MB by default.\n\nOr,\n/dev/block/zram0 none swap defaults\n    zramsize\u003d1073741824,max_comp_streams\u003d8,zram_loopback_path\u003d/data/unencrypted/zram_swap,zram_loopback_size\u003d1G\n\n\u003d\u003d\u003e loopback size can be specified by \"zram_loopback_size\u003d%s\" with \"GB\" or \"MB\".\n\nOr,\n/dev/block/zram0 none swap defaults\n    zramsize\u003d1073741824,max_comp_streams\u003d8,zram_backing_dev_path\u003d/dev/block/partition\n\nBug: 74582279\nBug: 122659265\nChange-Id: I66a2e6953b4743a34cf732dd0f5b5256c901f247\nSigned-off-by: Jaegeuk Kim \u003cjaegeuk@google.com\u003e\n"
    },
    {
      "commit": "4f4caccefdd47d9d3ef98a0e1dacb8d00ff53a0a",
      "tree": "6bceac86d36480ed66eaf658bfb60407360d14d0",
      "parents": [
        "789d905b50eb4acac76ef064f039ebce57729570"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jan 08 10:39:00 2019 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jan 08 10:39:59 2019 -0800"
      },
      "message": "Revert \"do not start shutdown animation from init\"\n\nThis reverts commit e2b04b71ae3792e2d8d2fda537343549ebfcc8bb.\n\nConditionally reintroduce the shutdown animation as there is some\ninterest in retaining it.\n\nBug: 117854737\nTest: n/a\nChange-Id: I99a085bc763e230de46aa44b3488d771f7ad04ce\n"
    },
    {
      "commit": "0e0f818c8ad876142d8c3f9bb0f909d7c78f69d1",
      "tree": "bec0c4bcfdab084b104794f07e5144be59698992",
      "parents": [
        "5729cff611be1dbb75c34695ab195ab878d44420"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Fri Nov 16 12:49:06 2018 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Fri Nov 16 12:53:18 2018 -0800"
      },
      "message": "logical -\u003e dynamic partitions.\n\nReflect a name change.\nTest: boots\nBug: 119286600\n\nChange-Id: I076071be18be521eeee4ebae10491b9f3e8ef857\n"
    },
    {
      "commit": "4c67290da6f889f88d06214d3177c5b55068b164",
      "tree": "a1631bf3251abab607d019ec4477718fbdef1982",
      "parents": [
        "a2ccce870c7ee7a79dace7e26fbf3ecf86e08676",
        "d9872646256c598f06d28add099a60efc638961a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Oct 11 20:34:04 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 11 20:34:04 2018 +0000"
      },
      "message": "Merge \"init: add [[nodiscard]] to Result\""
    },
    {
      "commit": "d9872646256c598f06d28add099a60efc638961a",
      "tree": "687f12ddf8172a5d4f8ed65ced3305a634976ce1",
      "parents": [
        "f7d154e10f895b6745511e6bf01edf3f375334fc"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Oct 11 10:38:05 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Oct 11 10:39:33 2018 -0700"
      },
      "message": "init: add [[nodiscard]] to Result\n\nIt\u0027s better to either check these results or explicitly ignore them.\nOnly a few callers weren\u0027t already doing this, so it\u0027s relatively\ntrivial to enforce.\n\nTest: build\nChange-Id: I44cdc342e46128f66cac914aaa0b9b4559cacd8c\n"
    },
    {
      "commit": "b5de088262b735267288bbdd3f4430f18f281967",
      "tree": "82f18ed9ddbeeee0fece8666487a4e94c359e934",
      "parents": [
        "e8ab57765ba1ecc5ff66d0b5d6ef20caba77ec02"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Oct 09 12:42:06 2018 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Oct 09 12:53:30 2018 -0700"
      },
      "message": "init: increase thermal shutdown timeout to 3s\n\n1) increase thermal shutdown timeout to 3s for process to save work\n2) respect property \"ro.build.shutdown_timeout\" in thermal shutdown if\n   it is set less than default time - \"3s\"\n\nBug: 112432890\nTest: Build\nChange-Id: Idc2b24dd44c1fab8f9b047fd2468de2ee45ff783\n"
    },
    {
      "commit": "29e9833e3987b5f94d29df7aa56c1eface996983",
      "tree": "5fcbfdb4f8403ce721146a4b09ebb0789f7542df",
      "parents": [
        "15a5c9c44fee0246b6b762457e4132b700cdc7f1",
        "f274e78eeb2b1dcb951dddc89dd574a4909ac647"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Oct 03 21:22:50 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 03 21:22:50 2018 +0000"
      },
      "message": "Merge \"fs_mgr/init: use unique_ptr + CLO_EXEC for setmntent()/fopen()\""
    },
    {
      "commit": "f274e78eeb2b1dcb951dddc89dd574a4909ac647",
      "tree": "cd7ac776f767e0f79fc45d28b9342937317371c1",
      "parents": [
        "3da42a6c05311653ff5d12b5057d5f3c40ac0c1a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Oct 03 13:13:41 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Oct 03 13:19:04 2018 -0700"
      },
      "message": "fs_mgr/init: use unique_ptr + CLO_EXEC for setmntent()/fopen()\n\nWe ran into an issue with an fd leaking due to missing both CLO_EXEC\nand fclose() in related code, so let\u0027s make sure we\u0027re safe here too.\n\nTest: boot\nChange-Id: Ief893c936859815c78fa6d7e06cb88ad34aadbac\n"
    },
    {
      "commit": "542582689d53fc3a1c9d8297e42b7aa92291b7fe",
      "tree": "bff3e85e828275f10205affaedf36f0cde670148",
      "parents": [
        "6590255dbbcbd35c527b3a2e6871275ec88fee64"
      ],
      "author": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Wed Sep 19 21:14:18 2018 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Tue Sep 25 03:52:12 2018 +0000"
      },
      "message": "Support \u0027adb reboot fastboot\u0027 command conditionally.\n\nDevices not supporting logical partitions do not require the command.\n\nBug: 78793464\nTest: \u0027adb reboot fastboot\u0027 reboots to bootloader for a device\nnot supporting logical partitions.\n\nChange-Id: I0a7b6d4335040e24efbf461e2dd2d56ab1985b7f\n"
    },
    {
      "commit": "3231be66cee9dde1681271da55540b4eca6f3160",
      "tree": "b25fc8de4e7c6f270c98b4c42bb2eb2f40cee170",
      "parents": [
        "a5d5c9debc997ddb22a0d35e0c00cc51271a1d9c",
        "71fb82a271cc793f5c21f492f5f08507ba49e376"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 14 21:25:50 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 14 21:25:50 2018 +0000"
      },
      "message": "Merge \"Add sideload, fastboot as reboot targets in init\""
    },
    {
      "commit": "44aceed01649353af82bbc5367098b55cf3b5d69",
      "tree": "bb936682d23b6a4b76dfa29ad3608272f427789d",
      "parents": [
        "132615b8031411aa731fe400ba5a8b21da834560"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 03 13:36:18 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 03 13:40:17 2018 -0700"
      },
      "message": "Split init\u0027s source files init first stage and second stage\n\nThis is a baseline for splitting init first and second stage into\ntheir own executables.\n\nBug: 79758715\nTest: sailfish boots\nChange-Id: I549ad4502893b3a5e4c2a9886f66850f6d31b619\n"
    },
    {
      "commit": "71fb82a271cc793f5c21f492f5f08507ba49e376",
      "tree": "46028489bd45b2ff1985a94fe1e62a237b20719f",
      "parents": [
        "9c16700e36f17517ee25fca258f75bb0095323bb"
      ],
      "author": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Thu Aug 02 15:02:06 2018 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Fri Aug 03 10:03:41 2018 -0700"
      },
      "message": "Add sideload, fastboot as reboot targets in init\n\nRebooting to these targets requires writing bootloader\nmessages and thus root. Moving them into init means that\nadb, reboot don\u0027t need root to use these targets.\n\nTest: try rebooting to these targets\nBug: 78793464\nChange-Id: Ia002d1e3b1cb0c0616f60435fb9af4dce162cf84\n"
    },
    {
      "commit": "92c49bcb3098050d41dd32a782a97cbd7a88675a",
      "tree": "80a24c534b10442a437c6d6e073d4f75b3cd9832",
      "parents": [
        "18be1e2f7e27de79b2a3c2197b8bb30c958a5644"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Fri Jul 27 11:19:25 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Fri Jul 27 11:19:44 2018 -0700"
      },
      "message": "init: Cleanly shut down subcontext processes\n\nThis change adds an explicit cleanup for the subcontext processes and\navoids them from respawning, which causes a bunch of LOG(FATAL)s when\nthe system is going down.\n\nBug: 80425914\nTest: kill -TERM $INIT_PID, no crashes for subcontext inits\n\nChange-Id: I135191d959c1dd921b102af316b24d2bc161d6c9\n"
    },
    {
      "commit": "0a72e6cb721f3b9ac5b0719e142da3a84173b9a5",
      "tree": "11a32a20dfb72e8758d63ed4ba19ed2d8a5c1fea",
      "parents": [
        "e8d1b75c0c9384d476dd929b7215d9d121775081"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 19 16:19:01 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 19 16:37:02 2018 -0700"
      },
      "message": "Revert \"init: Reboot after timeout passes during reboot\"\n\nThis reverts commit c9fec9d2be73a26a4f4b297ee6bee9f9c62cb854.\n\nLooks like ext4 can\u0027t handle a system reboot happening in the middle\nof an unmount.  We\u0027ll have to find another way to handle this.\n\nBug: 74817735\nBug: 75310371\nTest: reboot device\nChange-Id: Ib4f7f7fd29988a31a99f146c40f6d987c1fef15e\n"
    },
    {
      "commit": "1f9d5406b3e4e86724248b71a3bd68a1440169e2",
      "tree": "6de805ae1fbc90af4bfdeff065ea11cc093da19b",
      "parents": [
        "ff9b1db67c930a3e04ed29714d8b872e92e27b85"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 15 10:22:40 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Mar 15 10:24:00 2018 -0700"
      },
      "message": "init: add timers around sync() during shutdown\n\nIt seems that these sync() calls may take a long time in some\noccasions, so we add these logs to check.\n\nBug: 74817735\nTest: tree hugger\nChange-Id: Id3635f6c7a6618b20c7caf93b05e50cc50ef99de\n"
    },
    {
      "commit": "c9fec9d2be73a26a4f4b297ee6bee9f9c62cb854",
      "tree": "a3140af4d7edd26bed7d1cb97da115ad37e0bd2e",
      "parents": [
        "cdf778f5d92ab8748897a4d95693524d3273c23a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Feb 15 14:26:58 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Feb 23 11:03:01 2018 -0800"
      },
      "message": "init: Reboot after timeout passes during reboot\n\nThere is currently a timeout for reboot, however if the system gets\nstuck, particularly during file system operations, there is no safety\nmechanism that guarantees the system will still reboot.\n\nThis change does all of the optional reboot steps in a separate thread\nand waits for this thread with a timeout, such that if the reboot\nsteps get hung, the system is guaranteed to still reboot.\n\nThis is specific to \u0027reboot\u0027.  Shutdown continues to run unbounded to\nrun fsck.\n\nBug: 72781711\nTest: Reboot devices hitting and not hitting this timeout\nChange-Id: Id5e1b3693bab00602177e28b9b662e1499c32961\n"
    },
    {
      "commit": "7fd3bc27eccdcb11de4886bdda05cd26a8d8af5c",
      "tree": "4235be71596d436217a6e4f3abff105472cf91ad",
      "parents": [
        "0f6417f232e92aad0d712ab1b131c0829869cddd"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 13 15:36:14 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 14 16:37:09 2018 -0800"
      },
      "message": "Move ActionManager to its own file\n\nBug: 36970783\nTest: build\nChange-Id: I08fa39052236b462249f79de1d02bf02bdbf4c84\n"
    },
    {
      "commit": "d5eccfd4171d4211f4a301c25fb75bec4b657b0a",
      "tree": "5ea70fdf68ebab537465541b37ccde3d365fe802",
      "parents": [
        "5e5056c5a575f6c117985f2003c71eae1900337c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jan 19 13:01:53 2018 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jan 19 14:45:10 2018 -0800"
      },
      "message": "Init remove direct calls to light sys nodes.\n\nThese are halified. Instead launch blank_screen which\ndoes the same task w/o init itself having binder\ndependencies.\n\nBug: 70846424\nTest: manual + reboot appears similar\nChange-Id: If8b2a56cbc31077122ea81406721b06034e4498f\n"
    },
    {
      "commit": "25dc30f3be4d3142d0fd0cd2e22e226712e891b7",
      "tree": "8cf961a297290cf4c2e87e8529c23f3ec7f1b92c",
      "parents": [
        "c2a2ecb7a58afaf965ddc0a7ad88af9a9a029b3c"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Mon Oct 23 15:32:03 2017 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Mon Oct 23 16:25:31 2017 -0700"
      },
      "message": "init: call umount unconditionally\n\nstd::all_of is using std::find_if, which means, if any element the given\npredicate returns false, it stops further iteration and just returns false.\nstd::all_of used in Reboot.cpp will cause umount not to be called on all\nblock devices if some block device returns false in the middle.\n\nBug: 68158923\nTest: reboot\nChange-Id: I43ba6bd0c18018c1ed5fe2b63996552bc51cc67c\n"
    },
    {
      "commit": "6290982ee324a1612d575b276bb8a1c3b921548a",
      "tree": "1da5958ef6a2267def5fcae3dfc2dd14b7cde346",
      "parents": [
        "be729702ae8cf0771e8b69daf87bc251a13a3a60"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Oct 09 09:27:16 2017 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Oct 10 09:37:59 2017 -0700"
      },
      "message": "init+bootstat: reduce last reboot reason to canonical alias\n\nTo make parsing easier for last reboot reason.  This also ensures that\nlast boot reason matches the content that is typically returned by the\nbootloader or in turn landed in the canonical system boot reason.\n\nSimplify parsing in bootstat.  Adjust and fix boot_reason_test.sh for\nnew reality.  Allow boot reason tests battery and kernel_panic to pass\nif device does not support pstore (empty before and after the test).\nIf device somehow landed in fastboot mode while waiting for the\ndisplay, issue a fastboot reboot to move the test along.  Some cleanup\nand standardization changes to the test script.\n\nTest: system/core/bootstat/boot_reason_test.sh\nBug: 63736262\nChange-Id: I97d5467c0b4a6d65df3525f1a2d0051db813d5ad\n"
    },
    {
      "commit": "0f04f72c2de2f5c42e62f23306bc106dddcdabb1",
      "tree": "b68f230db4d553143836af52daa74b3e4f495944",
      "parents": [
        "142303b9d944da874385110636eb98c35699c0e2"
      ],
      "author": {
        "name": "Jaegeuk Kim",
        "email": "jaegeuk@google.com",
        "time": "Mon Sep 25 10:55:39 2017 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Oct 04 19:30:49 2017 -0700"
      },
      "message": "init/reboot: call MNT_FORCE at the last umount(2)\n\nThe last one will avoid errors\u003dpanic in ext4.\n\nTest: Build\nBug: 63981945\nBug: 65481582\nChange-Id: I9c86afcce441767e24fc43668ab1ff6230155a9f\nSigned-off-by: Jaegeuk Kim \u003cjaegeuk@google.com\u003e\n"
    },
    {
      "commit": "cb0f9bbc855097e0c8248643015b837255fd569a",
      "tree": "cc42fe9dc7a6011c2b9e9ee0fd26f9f2454e1746",
      "parents": [
        "9c568d0fc0e290529180e3fc0452f0ac489e5053"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 12 15:58:47 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 29 13:06:26 2017 -0700"
      },
      "message": "init: run vendor commands in a separate SELinux context\n\nOne of the major aspects of treble is the compartmentalization of system\nand vendor components, however init leaves a huge gap here, as vendor\ninit scripts run in the same context as system init scripts and thus can\naccess and modify the same properties, files, etc as the system can.\n\nThis change is meant to close that gap.  It forks a separate \u0027subcontext\u0027\ninit that runs in a different SELinux context with permissions that match\nwhat vendors should have access to.  Commands get sent over a socket to\nthis \u0027subcontext\u0027 init that then runs them in this SELinux context and\nreturns the result.\n\nNote that not all commands run in the subcontext; some commands such as\nthose dealing with services only make sense in the context of the main\ninit process.\n\nBug: 62875318\nTest: init unit tests, boot bullhead, boot sailfish\n\nChange-Id: Idf4a4ebf98842d27b8627f901f961ab9eb412aee\n"
    },
    {
      "commit": "bfd05b69a5c9baf213085cba44f5aa76d60e74d9",
      "tree": "5ae69415f542f8a37d293444d9f27cbf0854ec50",
      "parents": [
        "92c355cc4fcc608791f258d28e2bcfcccc19acd0"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 26 11:10:12 2017 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 26 14:06:51 2017 -0700"
      },
      "message": "init: shutdown,thermal shut off display immediately\n\nRemove a source of heat.\n\nTest: manual\nChange-Id: I9a7391ddb121b6748a4f49f4b5bfb77453ca1514\n"
    },
    {
      "commit": "9f97f4794027d8143b7d4f2d3ad4f80ca72ca77a",
      "tree": "d3483bb93fd2fe22fd5b71b0668145ce9571ef29",
      "parents": [
        "6139592321a489607534d9f51533d33908d75ba4"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Sep 06 13:43:57 2017 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Thu Sep 07 10:47:04 2017 -0700"
      },
      "message": "init: Allow clean system shutdown upon SIGTERM\n\nThis allows Android to cleanly shutdown when running in a PID namespace\nin a way that does not rely on adbd running. This is useful to allow\nAndroid to be running in a container and its lifetime managed by an\nOCI-compliant tool.\n\nBug: 65415372\nTest: `kill -TERM 1` as root is correctly dropped.\nTest: `kill -TERM 1` from the init PID namespace causes init to cleanly shutdown.\nChange-Id: Ia66ebdb436221919081bc4723337c0c7f1e53b09\n"
    }
  ],
  "next": "9bde0dc769b8085536faded5da5ebf0e1077dd92"
}
