)]}'
{
  "commit": "5f4e8eac8a0db87a43ed7a930103f4241c22d479",
  "tree": "1d92f05c1feaa8035bf1c58ee42d485281ababca",
  "parents": [
    "d43b615216fb1656fb5234e8202aa3ed7b37fda7"
  ],
  "author": {
    "name": "Tom Cherry",
    "email": "tomcherry@google.com",
    "time": "Mon Jun 19 18:08:39 2017 -0700"
  },
  "committer": {
    "name": "Tom Cherry",
    "email": "tomcherry@google.com",
    "time": "Tue Jun 20 21:29:51 2017 +0000"
  },
  "message": "init: poll in first stage mount if required devices are not found\n\nFirst stage mount in init currently attempts to regenerate uevents for\nspecific devices to create the corresponding dev nodes.  However, this\nis racy as first stage mount happens early in the boot process and\nit\u0027s possible that some of these devices have not yet been created by\nthe kernel.\n\nTo fix this issue, init will poll on the uevent socket for up to 10\nseconds waiting for the kernel to create the required device.  It will\nreturn false and panic if this 10 second timeout passes.\n\nNote that the same uevent socket is used in the uevent regeneration\nand the polling code, so there is no race if the device is created\nafter the uevent regeneration and before polling starts; the first\npoll will pick up the device.\n\nBug: 62681642\nBug: 62682821\nTest: Boot bullhead\nTest: Boot sailfish\nTest: Boot hikey + hotplug/unplug sdcard\nMerged-In: I4a6ff043eb7115b729ca4954ebc6c9e000132993\nChange-Id: I4a6ff043eb7115b729ca4954ebc6c9e000132993\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "27a20a435a7cdb0d3ce231d7921efa4641aef60d",
      "old_mode": 33188,
      "old_path": "init/devices.cpp",
      "new_id": "6f866623d4ac4d28489bd98ad0eaa8d20c7b162a",
      "new_mode": 33188,
      "new_path": "init/devices.cpp"
    },
    {
      "type": "modify",
      "old_id": "3f2cde4c3c31c6495b6ac221581b0b9d6bdfe7e5",
      "old_mode": 33188,
      "old_path": "init/devices.h",
      "new_id": "62aef2e96523ca47e27d54a17758cce66c5679e2",
      "new_mode": 33188,
      "new_path": "init/devices.h"
    },
    {
      "type": "modify",
      "old_id": "60ce6e9c012c7e91223cea5f70e1d01e901d3a29",
      "old_mode": 33188,
      "old_path": "init/init_first_stage.cpp",
      "new_id": "9425027f8adb2939b99d093690b41da49ffa671f",
      "new_mode": 33188,
      "new_path": "init/init_first_stage.cpp"
    },
    {
      "type": "modify",
      "old_id": "f27be647977522873c3957b5c6e8738aeedb1b48",
      "old_mode": 33188,
      "old_path": "init/ueventd.cpp",
      "new_id": "d0b7b8ebbe83c2fcb7b3d897024438e8f96e7fa2",
      "new_mode": 33188,
      "new_path": "init/ueventd.cpp"
    }
  ]
}
