From 9df4ac60939841472e9e29261c55be4dd2030f9a Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Thu, 26 Aug 2021 03:23:37 +0000 Subject: [PATCH] Start blob store service synchronously. Starting the service asynchronously is resulting in a race condition when accessing a shared data structure. We could add a lock to guard this data structure but this is resulting in a slightly worse performance than starting the service synchronously. Bug: 194428627 Bug: 179687249 Test: treehugger verification Change-Id: Ib4d610e8a221f94a3dcc8475371b4a05e5582149 --- services/java/com/android/server/SystemServer.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 4897ca0efedb4..f5f1d497878a3 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -437,7 +437,6 @@ public final class SystemServer implements Dumpable { private static final String SYSPROP_START_UPTIME = "sys.system_server.start_uptime"; private Future mZygotePreload; - private Future mBlobStoreServiceStart; private final SystemServerDumper mDumper = new SystemServerDumper(); @@ -2255,12 +2254,9 @@ public final class SystemServer implements Dumpable { t.traceEnd(); } - mBlobStoreServiceStart = SystemServerInitThreadPool.submit(() -> { - final TimingsTraceAndSlog traceLog = TimingsTraceAndSlog.newAsyncLog(); - traceLog.traceBegin(START_BLOB_STORE_SERVICE); - mSystemServiceManager.startService(BLOB_STORE_MANAGER_SERVICE_CLASS); - traceLog.traceEnd(); - }, START_BLOB_STORE_SERVICE); + t.traceBegin(START_BLOB_STORE_SERVICE); + mSystemServiceManager.startService(BLOB_STORE_MANAGER_SERVICE_CLASS); + t.traceEnd(); // Dreams (interactive idle-time views, a/k/a screen savers, and doze mode) t.traceBegin("StartDreamManager"); @@ -2659,9 +2655,6 @@ public final class SystemServer implements Dumpable { mSystemServiceManager.startService(APP_COMPAT_OVERRIDES_SERVICE_CLASS); t.traceEnd(); - ConcurrentUtils.waitForFutureNoInterrupt(mBlobStoreServiceStart, - START_BLOB_STORE_SERVICE); - // These are needed to propagate to the runnable below. final NetworkManagementService networkManagementF = networkManagement; final NetworkStatsService networkStatsF = networkStats;