diff options
author | Eric Laurent <elaurent@google.com> | 2013-07-02 11:15:41 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2013-07-02 12:15:10 -0700 |
commit | f59a4b393f4844c5bbc8d6212364bdddea33d232 (patch) | |
tree | 50a7dc8e5ac254ca4f6a40d84980713a8ac30599 /services/audioflinger/ISchedulingPolicyService.cpp | |
parent | a691ff3c03e38e148bbefed35ebb15e552a12613 (diff) | |
download | frameworks_av-f59a4b393f4844c5bbc8d6212364bdddea33d232.zip frameworks_av-f59a4b393f4844c5bbc8d6212364bdddea33d232.tar.gz frameworks_av-f59a4b393f4844c5bbc8d6212364bdddea33d232.tar.bz2 |
fix scheduling policy service death detection
Check status of transactions to scheduling policy service
and re-acquire a binder interface in case of DEAD_OBJECT.
Bug: 8875559.
Change-Id: I1e00bd44e2d4723b3ec95d5c31d9652ba08e238a
Diffstat (limited to 'services/audioflinger/ISchedulingPolicyService.cpp')
-rw-r--r-- | services/audioflinger/ISchedulingPolicyService.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/services/audioflinger/ISchedulingPolicyService.cpp b/services/audioflinger/ISchedulingPolicyService.cpp index 0079968..f55bc02 100644 --- a/services/audioflinger/ISchedulingPolicyService.cpp +++ b/services/audioflinger/ISchedulingPolicyService.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#define LOG_TAG "SchedulingPolicyService" +#define LOG_TAG "ISchedulingPolicyService" //#define LOG_NDEBUG 0 #include <binder/Parcel.h> @@ -45,9 +45,17 @@ public: data.writeInt32(tid); data.writeInt32(prio); uint32_t flags = asynchronous ? IBinder::FLAG_ONEWAY : 0; - remote()->transact(REQUEST_PRIORITY_TRANSACTION, data, &reply, flags); - // fail on exception - if (reply.readExceptionCode() != 0) return -1; + status_t status = remote()->transact(REQUEST_PRIORITY_TRANSACTION, data, &reply, flags); + if (status != NO_ERROR) { + return status; + } + if (asynchronous) { + return NO_ERROR; + } + // fail on exception: force binder reconnection + if (reply.readExceptionCode() != 0) { + return DEAD_OBJECT; + } return reply.readInt32(); } }; |