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
This commit is contained in:
Sudheer Shanka
2021-08-26 03:23:37 +00:00
parent 445d71dc3c
commit 9df4ac6093

View File

@@ -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;