From 5efa773cc1052fc23e3d8d4fc001a03a4f0dc0b2 Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Mon, 19 Jun 2017 11:48:09 -0700 Subject: [PATCH] Revert "Load the gralloc module at library load" This reverts commit 33c08a53ac641c9a9e5a6a1ed75cfb924c95258f. Some gralloc implementations apparently have library initializers (executed on dlopen) which create anonymous sockets, open device nodes, etc. which Zygote and some other non-Zygote-child processes that use libui don't have permissions to do. When the library initializer fails, it crashes the process. Reverting this until this initialization code can be made lazy (on first use of gralloc). Bug: 62732270 Test: boot fugu to launcher --- graphics/mapper/2.0/default/GrallocMapper.cpp | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/graphics/mapper/2.0/default/GrallocMapper.cpp b/graphics/mapper/2.0/default/GrallocMapper.cpp index e06fbcbc1e..d16143da49 100644 --- a/graphics/mapper/2.0/default/GrallocMapper.cpp +++ b/graphics/mapper/2.0/default/GrallocMapper.cpp @@ -293,31 +293,20 @@ Return GrallocMapper::unlock(void* buffer, unlock_cb hidl_cb) { return Void(); } -namespace { -// Load the gralloc module when this shared library is loaded, rather than -// waiting until HIDL_FETCH_IMapper is called. This allows it (and its -// dependencies) to be loaded by Zygote, reducing app startup time and sharing -// pages dirtied during library load between all apps. -struct GrallocModule { - const hw_module_t* module; - GrallocModule() : module(nullptr) { - int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); - ALOGE_IF(err, "failed to get gralloc module: %s (%d)", strerror(-err), - err); - } -}; -GrallocModule gGralloc; -} // namespace - IMapper* HIDL_FETCH_IMapper(const char* /* name */) { - if (!gGralloc.module) return nullptr; + const hw_module_t* module = nullptr; + int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); + if (err) { + ALOGE("failed to get gralloc module"); + return nullptr; + } - uint8_t major = (gGralloc.module->module_api_version >> 8) & 0xff; + uint8_t major = (module->module_api_version >> 8) & 0xff; switch (major) { case 1: - return new Gralloc1Mapper(gGralloc.module); + return new Gralloc1Mapper(module); case 0: - return new Gralloc0Mapper(gGralloc.module); + return new Gralloc0Mapper(module); default: ALOGE("unknown gralloc module major version %d", major); return nullptr;