diff options
| author | 2021-04-13 19:45:58 +0000 | |
|---|---|---|
| committer | 2021-04-13 19:45:58 +0000 | |
| commit | d7f7f3f072b1850139ebd643bf77e333b330ff1c (patch) | |
| tree | f55c51227486d134486df879b310ce2f9c7cd19f | |
| parent | f9932d790474fcf3f10c2085d18f86e672ebec54 (diff) | |
| parent | cdd7df92b0efdea578b32aa98276d20817c7c48e (diff) | |
Merge "SurfaceFlinger::getNewTexture: Don't deadlock on main thread" into sc-dev
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 02579c6bde..82661eca68 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -693,12 +693,16 @@ uint32_t SurfaceFlinger::getNewTexture() { // The pool was empty, so we need to get a new texture name directly using a // blocking call to the main thread - return schedule([this] { + auto genTextures = [this] { uint32_t name = 0; getRenderEngine().genTextures(1, &name); return name; - }) - .get(); + }; + if (std::this_thread::get_id() == mMainThreadId) { + return genTextures(); + } else { + return schedule(genTextures).get(); + } } void SurfaceFlinger::deleteTextureAsync(uint32_t texture) { |