summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2015-07-23 10:27:30 -0700
committerJohn Reck <jreck@google.com>2015-07-23 17:34:14 +0000
commit2abf0f24af60b8644d5b61eed9666793083546ee (patch)
tree7df9cac21e2e15614c366d1a738870846c16ad2b
parentb3e407609f567884f9322e7b34461baa14e3f3ae (diff)
downloadframeworks_base-2abf0f24af60b8644d5b61eed9666793083546ee.zip
frameworks_base-2abf0f24af60b8644d5b61eed9666793083546ee.tar.gz
frameworks_base-2abf0f24af60b8644d5b61eed9666793083546ee.tar.bz2
Fix a race condition that could cause lockup
Bug: 22676664 If a task is queued on a worker thread that is busy processing a task AND a trim memory signal comes along prior to the initial task being completed then the tasks that were queued prior to the exit request will never be processed. This is bad, as when those futures are used later on, such as in trying to delete them from the cache, they will block waiting for the orphaned task to be finished. Simple fix is to just never stop the worker threads. Increase RAM usage slightly as we won't reclaim that stack space, but this cost is fairly small Change-Id: I818b011f9bc6ba06942fdad81c27656bd97b42d4
-rw-r--r--libs/hwui/Caches.cpp5
1 files changed, 0 insertions, 5 deletions
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 1030451..aa73d44 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -248,11 +248,6 @@ void Caches::clearGarbage() {
void Caches::flush(FlushMode mode) {
FLUSH_LOGD("Flushing caches (mode %d)", mode);
- // We must stop tasks before clearing caches
- if (mode > kFlushMode_Layers) {
- tasks.stop();
- }
-
switch (mode) {
case kFlushMode_Full:
textureCache.clear();