diff options
author | Andy Hung <hunga@google.com> | 2015-09-04 17:55:47 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-09-04 17:55:47 +0000 |
commit | 7ecf636997b812ff5ae87ea9e146707d37d1b78a (patch) | |
tree | fa11368bc8a953acacd8cd9cac4745a95c1b9b52 /media/libmedia | |
parent | 3af22d1fea1abc4b1cc1c682e4ffaa9e6462a173 (diff) | |
parent | 7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c (diff) | |
download | frameworks_av-7ecf636997b812ff5ae87ea9e146707d37d1b78a.zip frameworks_av-7ecf636997b812ff5ae87ea9e146707d37d1b78a.tar.gz frameworks_av-7ecf636997b812ff5ae87ea9e146707d37d1b78a.tar.bz2 |
am 7734e37e: am a1179678: am be695f0a: am 5e193041: am 52a4fc09: am 3732a3ac: am ab203130: Merge "Make IEffect command more robust (second try)" into klp-dev
* commit '7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c':
Make IEffect command more robust (second try)
Diffstat (limited to 'media/libmedia')
-rw-r--r-- | media/libmedia/IEffect.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/media/libmedia/IEffect.cpp b/media/libmedia/IEffect.cpp index 761b243..faf5795 100644 --- a/media/libmedia/IEffect.cpp +++ b/media/libmedia/IEffect.cpp @@ -85,13 +85,15 @@ public: data.writeInt32(size); status_t status = remote()->transact(COMMAND, data, &reply); + if (status == NO_ERROR) { + status = reply.readInt32(); + } if (status != NO_ERROR) { if (pReplySize != NULL) *pReplySize = 0; return status; } - status = reply.readInt32(); size = reply.readInt32(); if (size != 0 && pReplyData != NULL && pReplySize != NULL) { reply.read(pReplyData, size); @@ -155,6 +157,10 @@ status_t BnEffect::onTransact( char *cmd = NULL; if (cmdSize) { cmd = (char *)calloc(cmdSize, 1); + if (cmd == NULL) { + reply->writeInt32(NO_MEMORY); + return NO_ERROR; + } data.read(cmd, cmdSize); } uint32_t replySize = data.readInt32(); @@ -162,15 +168,22 @@ status_t BnEffect::onTransact( char *resp = NULL; if (replySize) { resp = (char *)calloc(replySize, 1); + if (resp == NULL) { + free(cmd); + reply->writeInt32(NO_MEMORY); + return NO_ERROR; + } } status_t status = command(cmdCode, cmdSize, cmd, &replySz, resp); reply->writeInt32(status); - if (replySz < replySize) { - replySize = replySz; - } - reply->writeInt32(replySize); - if (replySize) { - reply->write(resp, replySize); + if (status == NO_ERROR) { + if (replySz < replySize) { + replySize = replySz; + } + reply->writeInt32(replySize); + if (replySize) { + reply->write(resp, replySize); + } } if (cmd) { free(cmd); |