mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 05:49:27 +00:00
Merge "audio: Fix handling of a thread exit command with a bad cookie" into main am: 759fb98667
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2908743 Change-Id: Ib53b2daa933ae42bd64b49e139e9a3ce2057162c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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<Tag::halReservedExit>();
|
||||
cookie == (mContext->getInternalCommandCookie() ^ getTid())) {
|
||||
case Tag::halReservedExit: {
|
||||
const int32_t cookie = command.get<Tag::halReservedExit>();
|
||||
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<Tag::halReservedExit>();
|
||||
cookie == (mContext->getInternalCommandCookie() ^ getTid())) {
|
||||
case Tag::halReservedExit: {
|
||||
const int32_t cookie = command.get<Tag::halReservedExit>();
|
||||
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;
|
||||
|
||||
@@ -90,7 +90,7 @@ class StreamContext {
|
||||
std::weak_ptr<sounddose::StreamDataProcessorInterface> 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),
|
||||
|
||||
Reference in New Issue
Block a user