Merge "Add an stune group for NNAPI HAL"
diff --git a/fastboot/fuzzy_fastboot/main.cpp b/fastboot/fuzzy_fastboot/main.cpp
index b9784fe..d9167e7 100644
--- a/fastboot/fuzzy_fastboot/main.cpp
+++ b/fastboot/fuzzy_fastboot/main.cpp
@@ -227,13 +227,6 @@
TEST_F(LogicalPartitionCompliance, FastbootRebootTest) {
ASSERT_TRUE(UserSpaceFastboot());
- GTEST_LOG_(INFO) << "Rebooting to bootloader mode";
- // Test 'fastboot reboot bootloader' from fastbootd
- fb->RebootTo("bootloader");
-
- // Test fastboot reboot fastboot from bootloader
- ReconnectFastbootDevice();
- ASSERT_FALSE(UserSpaceFastboot());
GTEST_LOG_(INFO) << "Rebooting back to fastbootd mode";
fb->RebootTo("fastboot");
@@ -268,23 +261,6 @@
GTEST_LOG_(INFO) << "Flashing a logical partition..";
EXPECT_EQ(fb->FlashPartition(test_partition_name, buf), SUCCESS)
<< "flash logical -partition failed";
- GTEST_LOG_(INFO) << "Rebooting to bootloader mode";
- // Reboot to bootloader mode and attempt to flash the logical partitions
- fb->RebootTo("bootloader");
-
- ReconnectFastbootDevice();
- ASSERT_FALSE(UserSpaceFastboot());
- GTEST_LOG_(INFO) << "Attempt to flash a logical partition..";
- EXPECT_EQ(fb->FlashPartition(test_partition_name, buf), DEVICE_FAIL)
- << "flash logical partition must fail in bootloader";
- GTEST_LOG_(INFO) << "Rebooting back to fastbootd mode";
- fb->RebootTo("fastboot");
-
- ReconnectFastbootDevice();
- ASSERT_TRUE(UserSpaceFastboot());
- GTEST_LOG_(INFO) << "Testing 'fastboot delete-logical-partition' command";
- EXPECT_EQ(fb->DeletePartition(test_partition_name), SUCCESS)
- << "delete logical-partition failed";
}
// Conformance tests
diff --git a/fs_mgr/libfs_avb/tests/util_test.cpp b/fs_mgr/libfs_avb/tests/util_test.cpp
index e64282b..5c388aa 100644
--- a/fs_mgr/libfs_avb/tests/util_test.cpp
+++ b/fs_mgr/libfs_avb/tests/util_test.cpp
@@ -232,8 +232,7 @@
// List files for comparison.
auto result = ListFiles(test_dir.value());
- ASSERT_TRUE(result);
- ASSERT_TRUE(result.has_value());
+ ASSERT_RESULT_OK(result);
auto files = result.value();
EXPECT_EQ(3UL, files.size());
// Sort them offline for comparison.
@@ -266,8 +265,7 @@
// List files for comparison.
auto result = ListFiles(test_dir.value());
- ASSERT_TRUE(result);
- ASSERT_TRUE(result.has_value());
+ ASSERT_RESULT_OK(result);
auto files = result.value();
EXPECT_EQ(2UL, files.size()); // Should not include the symlink file.
// Sort them offline for comparison.
@@ -287,7 +285,7 @@
base::FilePath no_such_dir = tmp_dir.Append("not_such_dir");
auto fail = ListFiles(no_such_dir.value());
- ASSERT_FALSE(fail);
+ ASSERT_FALSE(fail.ok());
EXPECT_EQ(ENOENT, fail.error().code());
EXPECT_TRUE(android::base::StartsWith(fail.error().message(), "Failed to opendir: "));
}
@@ -303,8 +301,7 @@
// List files without sorting.
auto result = ListFiles(test_dir.value());
- ASSERT_TRUE(result);
- ASSERT_TRUE(result.has_value());
+ ASSERT_RESULT_OK(result);
auto files = result.value();
EXPECT_EQ(0UL, files.size());
diff --git a/fs_mgr/libvbmeta/builder.cpp b/fs_mgr/libvbmeta/builder.cpp
index a901a4f..e6576ce 100644
--- a/fs_mgr/libvbmeta/builder.cpp
+++ b/fs_mgr/libvbmeta/builder.cpp
@@ -40,18 +40,18 @@
Result<void> SuperVBMetaBuilder::Build() {
for (const auto& [vbmeta_name, file_path] : images_path_) {
Result<std::string> content = ReadVBMetaImageFromFile(file_path);
- if (!content) {
+ if (!content.ok()) {
return content.error();
}
Result<uint8_t> vbmeta_index = AddVBMetaImage(vbmeta_name);
- if (!vbmeta_index) {
+ if (!vbmeta_index.ok()) {
return vbmeta_index.error();
}
Result<void> rv_export_vbmeta_image =
ExportVBMetaImageToFile(vbmeta_index.value(), content.value());
- if (!rv_export_vbmeta_image) {
+ if (!rv_export_vbmeta_image.ok()) {
return rv_export_vbmeta_image;
}
}
@@ -65,7 +65,7 @@
}
Result<uint64_t> file_size = GetFileSize(source_fd);
- if (!file_size) {
+ if (!file_size.ok()) {
return file_size.error();
}
@@ -98,7 +98,7 @@
slot_number = desc->vbmeta_index;
} else {
Result<uint8_t> new_slot = GetEmptySlot();
- if (!new_slot) {
+ if (!new_slot.ok()) {
return new_slot;
}
slot_number = new_slot.value();
@@ -162,7 +162,7 @@
android::base::Result<void> rv_write_primary_vbmeta_table =
WritePrimaryVBMetaTable(super_vbmeta_fd_, serialized_table);
- if (!rv_write_primary_vbmeta_table) {
+ if (!rv_write_primary_vbmeta_table.ok()) {
return rv_write_primary_vbmeta_table;
}
@@ -175,7 +175,7 @@
const std::string& vbmeta_image) {
Result<void> rv_write_vbmeta_image =
WriteVBMetaImage(super_vbmeta_fd_, vbmeta_index, vbmeta_image);
- if (!rv_write_vbmeta_image) {
+ if (!rv_write_vbmeta_image.ok()) {
return rv_write_vbmeta_image;
}
@@ -196,13 +196,13 @@
SuperVBMetaBuilder builder(super_vbmeta_fd, images_path);
Result<void> rv_build = builder.Build();
- if (!rv_build) {
+ if (!rv_build.ok()) {
LERROR << rv_build.error();
return false;
}
Result<void> rv_export = builder.ExportVBMetaTableToFile();
- if (!rv_export) {
+ if (!rv_export.ok()) {
LERROR << rv_export.error();
return false;
}
@@ -211,4 +211,4 @@
}
} // namespace fs_mgr
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/fs_mgr/libvbmeta/builder_test.cpp b/fs_mgr/libvbmeta/builder_test.cpp
index 9a015fd..487bece 100644
--- a/fs_mgr/libvbmeta/builder_test.cpp
+++ b/fs_mgr/libvbmeta/builder_test.cpp
@@ -26,24 +26,20 @@
std::unique_ptr<SuperVBMetaBuilder> builder = std::make_unique<SuperVBMetaBuilder>();
ASSERT_NE(builder, nullptr);
- Result<uint8_t> vbmeta_index = builder->AddVBMetaImage("vbmeta" /* vbmeta_name */
- );
- EXPECT_TRUE(vbmeta_index);
+ Result<uint8_t> vbmeta_index = builder->AddVBMetaImage("vbmeta" /* vbmeta_name */);
+ EXPECT_RESULT_OK(vbmeta_index);
- Result<uint8_t> vbmeta_system_slot = builder->AddVBMetaImage("vbmeta_system" /* vbmeta_name */
- );
- EXPECT_TRUE(vbmeta_system_slot);
+ Result<uint8_t> vbmeta_system_slot = builder->AddVBMetaImage("vbmeta_system" /* vbmeta_name */);
+ EXPECT_RESULT_OK(vbmeta_system_slot);
- Result<uint8_t> vbmeta_vendor_slot = builder->AddVBMetaImage("vbmeta_vendor" /* vbmeta_name */
- );
- EXPECT_TRUE(vbmeta_vendor_slot);
+ Result<uint8_t> vbmeta_vendor_slot = builder->AddVBMetaImage("vbmeta_vendor" /* vbmeta_name */);
+ EXPECT_RESULT_OK(vbmeta_vendor_slot);
- builder->DeleteVBMetaImage("vbmeta_system" /* vbmeta_name */
- );
+ builder->DeleteVBMetaImage("vbmeta_system" /* vbmeta_name */);
- Result<uint8_t> vbmeta_product_slot = builder->AddVBMetaImage("vbmeta_product" /* vbmeta_name */
- );
- EXPECT_TRUE(vbmeta_product_slot);
+ Result<uint8_t> vbmeta_product_slot =
+ builder->AddVBMetaImage("vbmeta_product" /* vbmeta_name */);
+ EXPECT_RESULT_OK(vbmeta_product_slot);
std::unique_ptr<VBMetaTable> table = builder->ExportVBMetaTable();
ASSERT_NE(table, nullptr);
@@ -77,4 +73,4 @@
for (int i = 0; i < sizeof(table->descriptors[2].reserved); i++)
EXPECT_EQ(table->descriptors[2].reserved[i], 0);
EXPECT_EQ(table->descriptors[2].vbmeta_name, "vbmeta_product");
-}
\ No newline at end of file
+}
diff --git a/fs_mgr/libvbmeta/reader.cpp b/fs_mgr/libvbmeta/reader.cpp
index 212d186..7b5ed93 100644
--- a/fs_mgr/libvbmeta/reader.cpp
+++ b/fs_mgr/libvbmeta/reader.cpp
@@ -64,7 +64,7 @@
}
Result<void> rv_header = LoadAndVerifySuperVBMetaHeader(header_buffer.get(), &table->header);
- if (!rv_header) {
+ if (!rv_header.ok()) {
return rv_header;
}
@@ -104,7 +104,7 @@
Result<void> ValidateVBMetaImage(int super_vbmeta_fd, int vbmeta_index,
const std::string& vbmeta_image) {
Result<std::string> content = ReadVBMetaImage(super_vbmeta_fd, vbmeta_index);
- if (!content) {
+ if (!content.ok()) {
return content.error();
}
diff --git a/fs_mgr/libvbmeta/super_vbmeta_test.cpp b/fs_mgr/libvbmeta/super_vbmeta_test.cpp
index 6b4fc5d..daed0d1 100644
--- a/fs_mgr/libvbmeta/super_vbmeta_test.cpp
+++ b/fs_mgr/libvbmeta/super_vbmeta_test.cpp
@@ -77,7 +77,7 @@
android::base::unique_fd fd(open(file.c_str(), O_RDONLY | O_CLOEXEC));
EXPECT_GT(fd, 0);
Result<uint64_t> file_size = GetFileSize(fd);
- EXPECT_TRUE(file_size);
+ EXPECT_RESULT_OK(file_size);
std::unique_ptr<uint8_t[]> buffer = std::make_unique<uint8_t[]>(VBMETA_IMAGE_MAX_SIZE);
EXPECT_TRUE(android::base::ReadFully(fd, buffer.get(), file_size.value()));
return std::string(reinterpret_cast<char*>(buffer.get()), VBMETA_IMAGE_MAX_SIZE);
@@ -138,15 +138,15 @@
// Check the size of vbmeta table
Result<uint64_t> super_vbmeta_size = GetFileSize(fd);
- EXPECT_TRUE(super_vbmeta_size);
+ EXPECT_RESULT_OK(super_vbmeta_size);
EXPECT_EQ(super_vbmeta_size.value(),
SUPER_VBMETA_TABLE_MAX_SIZE * 2 + VBMETA_IMAGE_MAX_SIZE * 3);
// Check Primary vbmeta table is equal to Backup one
VBMetaTable table;
- EXPECT_TRUE(android::fs_mgr::ReadPrimaryVBMetaTable(fd, &table));
+ EXPECT_RESULT_OK(android::fs_mgr::ReadPrimaryVBMetaTable(fd, &table));
VBMetaTable table_backup;
- EXPECT_TRUE(android::fs_mgr::ReadBackupVBMetaTable(fd, &table_backup));
+ EXPECT_RESULT_OK(android::fs_mgr::ReadBackupVBMetaTable(fd, &table_backup));
EXPECT_EQ(android::fs_mgr::SerializeVBMetaTable(table),
android::fs_mgr::SerializeVBMetaTable(table_backup));
@@ -167,25 +167,25 @@
EXPECT_EQ(table.descriptors[0].vbmeta_name_length, 14);
EXPECT_EQ(table.descriptors[0].vbmeta_name, "vbmeta_product");
Result<std::string> vbmeta_product_content = ReadVBMetaImage(fd, 0);
- EXPECT_TRUE(vbmeta_product_content);
+ EXPECT_RESULT_OK(vbmeta_product_content);
EXPECT_EQ(ReadVBMetaImageFromFile(vbmeta_product_path), vbmeta_product_content.value());
EXPECT_EQ(table.descriptors[1].vbmeta_index, 1);
EXPECT_EQ(table.descriptors[1].vbmeta_name_length, 13);
EXPECT_EQ(table.descriptors[1].vbmeta_name, "vbmeta_system");
Result<std::string> vbmeta_system_content = ReadVBMetaImage(fd, 1);
- EXPECT_TRUE(vbmeta_system_content);
+ EXPECT_RESULT_OK(vbmeta_system_content);
EXPECT_EQ(ReadVBMetaImageFromFile(vbmeta_system_path), vbmeta_system_content.value());
EXPECT_EQ(table.descriptors[2].vbmeta_index, 2);
EXPECT_EQ(table.descriptors[2].vbmeta_name_length, 13);
EXPECT_EQ(table.descriptors[2].vbmeta_name, "vbmeta_vendor");
Result<std::string> vbmeta_vendor_content = ReadVBMetaImage(fd, 2);
- EXPECT_TRUE(vbmeta_vendor_content);
+ EXPECT_RESULT_OK(vbmeta_vendor_content);
EXPECT_EQ(ReadVBMetaImageFromFile(vbmeta_vendor_path), vbmeta_vendor_content.value());
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/init/Android.bp b/init/Android.bp
index 42d0b33..f28934e 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -14,6 +14,61 @@
// limitations under the License.
//
+init_common_sources = [
+ "action.cpp",
+ "action_manager.cpp",
+ "action_parser.cpp",
+ "capabilities.cpp",
+ "epoll.cpp",
+ "import_parser.cpp",
+ "interface_utils.cpp",
+ "keychords.cpp",
+ "parser.cpp",
+ "property_type.cpp",
+ "rlimit_parser.cpp",
+ "service.cpp",
+ "service_list.cpp",
+ "service_parser.cpp",
+ "service_utils.cpp",
+ "subcontext.cpp",
+ "subcontext.proto",
+ "tokenizer.cpp",
+ "util.cpp",
+]
+init_device_sources = [
+ "bootchart.cpp",
+ "builtins.cpp",
+ "devices.cpp",
+ "firmware_handler.cpp",
+ "first_stage_init.cpp",
+ "first_stage_mount.cpp",
+ "fscrypt_init_extensions.cpp",
+ "init.cpp",
+ "lmkd_service.cpp",
+ "modalias_handler.cpp",
+ "mount_handler.cpp",
+ "mount_namespace.cpp",
+ "persistent_properties.cpp",
+ "persistent_properties.proto",
+ "property_service.cpp",
+ "property_service.proto",
+ "reboot.cpp",
+ "reboot_utils.cpp",
+ "security.cpp",
+ "selabel.cpp",
+ "selinux.cpp",
+ "sigchld_handler.cpp",
+ "switch_root.cpp",
+ "uevent_listener.cpp",
+ "ueventd.cpp",
+ "ueventd_parser.cpp",
+]
+init_host_sources = [
+ "check_builtins.cpp",
+ "host_import_parser.cpp",
+ "host_init_verifier.cpp",
+]
+
cc_defaults {
name: "init_defaults",
cpp_std: "experimental",
@@ -103,53 +158,7 @@
"init_defaults",
"selinux_policy_version",
],
- srcs: [
- "action.cpp",
- "action_manager.cpp",
- "action_parser.cpp",
- "bootchart.cpp",
- "builtins.cpp",
- "capabilities.cpp",
- "devices.cpp",
- "epoll.cpp",
- "firmware_handler.cpp",
- "first_stage_init.cpp",
- "first_stage_mount.cpp",
- "fscrypt_init_extensions.cpp",
- "import_parser.cpp",
- "init.cpp",
- "interface_utils.cpp",
- "keychords.cpp",
- "lmkd_service.cpp",
- "modalias_handler.cpp",
- "mount_handler.cpp",
- "mount_namespace.cpp",
- "parser.cpp",
- "persistent_properties.cpp",
- "persistent_properties.proto",
- "property_service.cpp",
- "property_service.proto",
- "property_type.cpp",
- "reboot.cpp",
- "reboot_utils.cpp",
- "security.cpp",
- "selabel.cpp",
- "selinux.cpp",
- "service.cpp",
- "service_list.cpp",
- "service_parser.cpp",
- "service_utils.cpp",
- "sigchld_handler.cpp",
- "subcontext.cpp",
- "subcontext.proto",
- "switch_root.cpp",
- "rlimit_parser.cpp",
- "tokenizer.cpp",
- "uevent_listener.cpp",
- "ueventd.cpp",
- "ueventd_parser.cpp",
- "util.cpp",
- ],
+ srcs: init_common_sources + init_device_sources,
whole_static_libs: [
"libcap",
"com.android.sysprop.apex",
@@ -297,30 +306,7 @@
"libprocessgroup",
"libprotobuf-cpp-lite",
],
- srcs: [
- "action.cpp",
- "action_manager.cpp",
- "action_parser.cpp",
- "capabilities.cpp",
- "check_builtins.cpp",
- "epoll.cpp",
- "keychords.cpp",
- "import_parser.cpp",
- "interface_utils.cpp",
- "host_import_parser.cpp",
- "host_init_verifier.cpp",
- "parser.cpp",
- "property_type.cpp",
- "rlimit_parser.cpp",
- "tokenizer.cpp",
- "service.cpp",
- "service_list.cpp",
- "service_parser.cpp",
- "service_utils.cpp",
- "subcontext.cpp",
- "subcontext.proto",
- "util.cpp",
- ],
+ srcs: init_common_sources + init_host_sources,
proto: {
type: "lite",
},
diff --git a/init/builtins.cpp b/init/builtins.cpp
index 60c3d40..200bfff 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -1309,17 +1309,6 @@
}
}
-static Result<void> do_finish_userspace_reboot(const BuiltinArguments&) {
- LOG(INFO) << "Userspace reboot successfully finished";
- boot_clock::time_point now = boot_clock::now();
- SetProperty("sys.init.userspace_reboot.last_finished",
- std::to_string(now.time_since_epoch().count()));
- if (!android::sysprop::InitProperties::userspace_reboot_in_progress(false)) {
- return Error() << "Failed to set sys.init.userspace_reboot.in_progress property";
- }
- return {};
-}
-
// Builtin-function-map start
const BuiltinFunctionMap& GetBuiltinFunctionMap() {
constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
@@ -1341,7 +1330,6 @@
{"exec_background", {1, kMax, {false, do_exec_background}}},
{"exec_start", {1, 1, {false, do_exec_start}}},
{"export", {2, 2, {false, do_export}}},
- {"finish_userspace_reboot", {0, 0, {false, do_finish_userspace_reboot}}},
{"hostname", {1, 1, {true, do_hostname}}},
{"ifup", {1, 1, {true, do_ifup}}},
{"init_user0", {0, 0, {false, do_init_user0}}},
diff --git a/init/reboot.cpp b/init/reboot.cpp
index 2f32a88..38e8227 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -731,9 +731,6 @@
static Result<void> DoUserspaceReboot() {
LOG(INFO) << "Userspace reboot initiated";
- boot_clock::time_point now = boot_clock::now();
- SetProperty("sys.init.userspace_reboot.last_started",
- std::to_string(now.time_since_epoch().count()));
auto guard = android::base::make_scope_guard([] {
// Leave shutdown so that we can handle a full reboot.
LeaveShutdown();
diff --git a/init/test_utils/include/init-test-utils/service_utils.h b/init/test_utils/include/init-test-utils/service_utils.h
index 3ec61d4..1b59c7b 100644
--- a/init/test_utils/include/init-test-utils/service_utils.h
+++ b/init/test_utils/include/init-test-utils/service_utils.h
@@ -25,7 +25,16 @@
namespace android {
namespace init {
-using ServiceInterfacesMap = std::map<std::string, std::set<android::FqInstance>>;
+// this is service name -> interface declaration
+//
+// So, for:
+// service foo ..
+// interface aidl baz
+// interface android.hardware.foo@1.0 IFoo
+//
+// We have:
+// foo -> { aidl/baz, android.hardware.foo@1.0/IFoo }
+using ServiceInterfacesMap = std::map<std::string, std::set<std::string>>;
android::base::Result<ServiceInterfacesMap> GetOnDeviceServiceInterfacesMap();
} // namespace init
diff --git a/init/test_utils/service_utils.cpp b/init/test_utils/service_utils.cpp
index bc00702..ae68679 100644
--- a/init/test_utils/service_utils.cpp
+++ b/init/test_utils/service_utils.cpp
@@ -47,14 +47,7 @@
for (const auto& service : service_list.services()) {
// Create an entry for all services, including services that may not
// have any declared interfaces.
- result[service->name()] = std::set<android::FqInstance>();
- for (const auto& intf : service->interfaces()) {
- android::FqInstance fqInstance;
- if (!fqInstance.setTo(intf)) {
- return android::base::Error() << "Unable to parse interface: '" << intf << "'";
- }
- result[service->name()].insert(fqInstance);
- }
+ result[service->name()] = service->interfaces();
}
return result;
}
diff --git a/libcutils/trace-container.cpp b/libcutils/trace-container.cpp
index c23d5e2..f7eed48 100644
--- a/libcutils/trace-container.cpp
+++ b/libcutils/trace-container.cpp
@@ -87,24 +87,28 @@
static void atrace_init_once()
{
- atrace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY | O_CLOEXEC);
+ atrace_marker_fd = open("/sys/kernel/tracing/trace_marker", O_WRONLY | O_CLOEXEC);
if (atrace_marker_fd < 0) {
- // We're in container, ftrace may be disabled. In such case, we use the
- // socket to write trace event.
+ // try debugfs
+ atrace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY | O_CLOEXEC);
+ if (atrace_marker_fd < 0) {
+ // We're in container, ftrace may be disabled. In such case, we use the
+ // socket to write trace event.
- // Protect the initialization of container socket from
- // atrace_set_tracing_enabled.
- pthread_mutex_lock(&atrace_enabling_mutex);
- atrace_use_container_sock = true;
- bool success = false;
- if (atomic_load_explicit(&atrace_is_enabled, memory_order_acquire)) {
- success = atrace_init_container_sock();
- }
- pthread_mutex_unlock(&atrace_enabling_mutex);
+ // Protect the initialization of container socket from
+ // atrace_set_tracing_enabled.
+ pthread_mutex_lock(&atrace_enabling_mutex);
+ atrace_use_container_sock = true;
+ bool success = false;
+ if (atomic_load_explicit(&atrace_is_enabled, memory_order_acquire)) {
+ success = atrace_init_container_sock();
+ }
+ pthread_mutex_unlock(&atrace_enabling_mutex);
- if (!success) {
- atrace_enabled_tags = 0;
- goto done;
+ if (!success) {
+ atrace_enabled_tags = 0;
+ goto done;
+ }
}
}
atrace_enabled_tags = atrace_get_property();
diff --git a/libstats/pull/Android.bp b/libstats/pull/Android.bp
index 2171aa4..de59033 100644
--- a/libstats/pull/Android.bp
+++ b/libstats/pull/Android.bp
@@ -23,7 +23,6 @@
include_dirs: ["frameworks/base/core/java"],
},
srcs: [
- ":statsd_aidl",
"stats_pull_atom_callback.cpp",
],
cflags: [
@@ -36,6 +35,7 @@
"libbinder",
"libstatssocket",
"libservices",
+ "statsd-aidl-cpp",
],
static_libs: [
"liblog",
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 103bfb3..9458e23 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -1041,6 +1041,7 @@
on userspace-reboot-requested
# TODO(b/135984674): reset all necessary properties here.
setprop sys.boot_completed ""
+ setprop dev.bootcomplete ""
setprop sys.init.updatable_crashing ""
setprop sys.init.updatable_crashing_process_name ""
setprop apexd.status ""
@@ -1066,4 +1067,4 @@
trigger boot
on property:sys.boot_completed=1 && property:sys.init.userspace_reboot.in_progress=1
- finish_userspace_reboot
+ setprop sys.init.userspace_reboot.in_progress ""