diff --git a/audio/aidl/default/Stream.cpp b/audio/aidl/default/Stream.cpp index a805b872cd..cf0870e2d4 100644 --- a/audio/aidl/default/Stream.cpp +++ b/audio/aidl/default/Stream.cpp @@ -180,17 +180,20 @@ StreamInWorkerLogic::Status StreamInWorkerLogic::cycle() { StreamDescriptor::Reply reply{}; reply.status = STATUS_BAD_VALUE; switch (command.getTag()) { - case Tag::halReservedExit: - if (const int32_t cookie = command.get(); - cookie == (mContext->getInternalCommandCookie() ^ getTid())) { + case Tag::halReservedExit: { + const int32_t cookie = command.get(); + if (cookie == (mContext->getInternalCommandCookie() ^ getTid())) { mDriver->shutdown(); setClosed(); - // This is an internal command, no need to reply. - return Status::EXIT; } else { LOG(WARNING) << __func__ << ": EXIT command has a bad cookie: " << cookie; } - break; + if (cookie != 0) { // This is an internal command, no need to reply. + return Status::EXIT; + } else { + break; + } + } case Tag::getStatus: populateReply(&reply, mIsConnected); break; @@ -400,17 +403,20 @@ StreamOutWorkerLogic::Status StreamOutWorkerLogic::cycle() { reply.status = STATUS_BAD_VALUE; using Tag = StreamDescriptor::Command::Tag; switch (command.getTag()) { - case Tag::halReservedExit: - if (const int32_t cookie = command.get(); - cookie == (mContext->getInternalCommandCookie() ^ getTid())) { + case Tag::halReservedExit: { + const int32_t cookie = command.get(); + if (cookie == (mContext->getInternalCommandCookie() ^ getTid())) { mDriver->shutdown(); setClosed(); - // This is an internal command, no need to reply. - return Status::EXIT; } else { LOG(WARNING) << __func__ << ": EXIT command has a bad cookie: " << cookie; } - break; + if (cookie != 0) { // This is an internal command, no need to reply. + return Status::EXIT; + } else { + break; + } + } case Tag::getStatus: populateReply(&reply, mIsConnected); break; diff --git a/audio/aidl/default/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h index aa9fb19a5b..21e63f9fef 100644 --- a/audio/aidl/default/include/core-impl/Stream.h +++ b/audio/aidl/default/include/core-impl/Stream.h @@ -90,7 +90,7 @@ class StreamContext { std::weak_ptr streamDataProcessor, DebugParameters debugParameters) : mCommandMQ(std::move(commandMQ)), - mInternalCommandCookie(std::rand()), + mInternalCommandCookie(std::rand() | 1 /* make sure it's not 0 */), mReplyMQ(std::move(replyMQ)), mFormat(format), mChannelLayout(channelLayout),