Skip to content

Commit

Permalink
ipmi: fix merge error
Browse files Browse the repository at this point in the history
  • Loading branch information
DHrpcs3 committed Sep 1, 2024
1 parent d4840e9 commit d0c9585
Showing 1 changed file with 31 additions and 33 deletions.
64 changes: 31 additions & 33 deletions orbis-kernel/src/ipmi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -547,51 +547,49 @@ orbis::SysResult orbis::sysIpmiClientTryGetResult(Thread *thread,
}

while (true) {
{
std::lock_guard clientLock(client->mutex);
std::lock_guard clientLock(client->mutex);

for (auto it = client->asyncResponses.begin();
it != client->asyncResponses.end(); ++it) {
if (it->methodId != _params.method) {
continue;
}
for (auto it = client->asyncResponses.begin();
it != client->asyncResponses.end(); ++it) {
if (it->methodId != _params.method) {
continue;
}

auto response = std::move(*it);
client->asyncResponses.erase(it);

auto response = std::move(*it);
client->asyncResponses.erase(it);
ORBIS_RET_ON_ERROR(uwrite(_params.pResult, it->errorCode));

ORBIS_RET_ON_ERROR(uwrite(_params.pResult, it->errorCode));
if (response.data.size() != _params.numOutData) {
ORBIS_LOG_ERROR(__FUNCTION__, "responses count mismatch",
response.data.size(), _params.numOutData);
}

if (response.data.size() != _params.numOutData) {
ORBIS_LOG_ERROR(__FUNCTION__, "responses count mismatch",
for (std::size_t i = 0; i < response.data.size(); ++i) {
if (response.data.size() > _params.numOutData) {
ORBIS_LOG_ERROR(__FUNCTION__, "too many responses",
response.data.size(), _params.numOutData);
break;
}

for (std::size_t i = 0; i < response.data.size(); ++i) {
if (response.data.size() > _params.numOutData) {
ORBIS_LOG_ERROR(__FUNCTION__, "too many responses",
response.data.size(), _params.numOutData);
break;
}

IpmiBufferInfo _outData;
ORBIS_RET_ON_ERROR(uread(_outData, _params.pOutData + i));
IpmiBufferInfo _outData;
ORBIS_RET_ON_ERROR(uread(_outData, _params.pOutData + i));

auto &data = response.data[i];
auto &data = response.data[i];

if (_outData.capacity < data.size()) {
ORBIS_LOG_ERROR(__FUNCTION__, "too big response", _outData.capacity,
data.size());
continue;
}

_outData.size = data.size();
ORBIS_RET_ON_ERROR(
uwriteRaw(_outData.data, data.data(), data.size()));
ORBIS_RET_ON_ERROR(uwrite(_params.pOutData + i, _outData));
if (_outData.capacity < data.size()) {
ORBIS_LOG_ERROR(__FUNCTION__, "too big response", _outData.capacity,
data.size());
continue;
}

return uwrite(result, 0u);
_outData.size = data.size();
ORBIS_RET_ON_ERROR(
uwriteRaw(_outData.data, data.data(), data.size()));
ORBIS_RET_ON_ERROR(uwrite(_params.pOutData + i, _outData));
}

return uwrite(result, 0u);
}

client->asyncResponseCv.wait(client->mutex);
Expand Down

0 comments on commit d0c9585

Please sign in to comment.