From 0845d0245e09548110cacb0f20e9934753388aab Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 5 Oct 2012 17:28:04 -0700 Subject: [PATCH] ugly, temporary, workaroung for a problem where a binder thread spins forever Bug: 7289992 Change-Id: I0c3d482a1af57e5f444be2ba7f2751ac3e954af2 --- libs/binder/IPCThreadState.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/binder/IPCThreadState.cpp b/libs/binder/IPCThreadState.cpp index 6e83faab7..03c10828d 100644 --- a/libs/binder/IPCThreadState.cpp +++ b/libs/binder/IPCThreadState.cpp @@ -482,6 +482,18 @@ void IPCThreadState::joinThreadPool(bool isMain) if(result == TIMED_OUT && !isMain) { break; } + + // HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK + // FIXME: we sometimes get unexplained EINVAL which causes this + // thread to spin forever. TEMPORARILY allow it to exit. + // We should probably assert on eng builds + if(result == -EINVAL && !isMain) { + ALOGE("**** THREAD %p (PID %d) ERROR (%d) LEAVING THE THREAD POOL\n", + (void*)pthread_self(), getpid(), result); + break; + } + // HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK + } while (result != -ECONNREFUSED && result != -EBADF); LOG_THREADPOOL("**** THREAD %p (PID %d) IS LEAVING THE THREAD POOL err=%p\n",