summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2015-09-04 17:49:31 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-09-04 17:49:31 +0000
commit7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c (patch)
tree132b989bf9ec4d2adf8131a33a57d0d370950d7b /media/libmedia
parenta6e476cb04dfccd5adde467b9b55ecb1f48dff58 (diff)
parenta1179678752e5755297a2bb66c730f4fd22856e3 (diff)
downloadframeworks_av-7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c.zip
frameworks_av-7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c.tar.gz
frameworks_av-7734e37efe4ad47d91cdc5cfa6703d77a7a2ac0c.tar.bz2
am a1179678: am be695f0a: am 5e193041: am 52a4fc09: am 3732a3ac: am ab203130: Merge "Make IEffect command more robust (second try)" into klp-dev
* commit 'a1179678752e5755297a2bb66c730f4fd22856e3': Make IEffect command more robust (second try)
Diffstat (limited to 'media/libmedia')
-rw-r--r--media/libmedia/IEffect.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/media/libmedia/IEffect.cpp b/media/libmedia/IEffect.cpp
index 9ab4484..2f6a91e 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);