diff --git a/services/hilogd/log_buffer.cpp b/services/hilogd/log_buffer.cpp index a3a12fd387c5e6d1c81cdd98e1eedf6aeccf5b87..97271336df7a89fa0516d6160b7d71652efce232 100644 --- a/services/hilogd/log_buffer.cpp +++ b/services/hilogd/log_buffer.cpp @@ -139,9 +139,7 @@ bool HilogBuffer::Query(std::shared_ptr reader) } if (reader->isNotified) { - if (reader->lastPos == hilogDataList.end()) { - reader->readPos = std::prev(reader->lastPos); - } else { + if (reader->readPos == hilogDataList.end()) { reader->readPos = std::next(reader->lastPos); } } @@ -173,13 +171,12 @@ bool HilogBuffer::Query(std::shared_ptr reader) printLenByDomain[reader->readPos->domain] += strlen(reader->readPos->content); } reader->readPos++; - reader->isNotified = false; hilogBufferMutex.unlock(); return true; } reader->readPos++; } - + reader->isNotified = false; ReturnNoLog(reader); hilogBufferMutex.unlock(); return false; diff --git a/services/hilogd/log_querier.cpp b/services/hilogd/log_querier.cpp index ea6d7eeb0430c9003bd72f9d8c6c320e4e70cf3e..0faf359f8f176893f87e8b64297d1c25ecfd8282 100644 --- a/services/hilogd/log_querier.cpp +++ b/services/hilogd/log_querier.cpp @@ -542,14 +542,17 @@ int LogQuerier::WriteData(HilogData* data) void LogQuerier::NotifyForNewData() { + if (isNotified) { + return; + } + isNotified = true; LogQueryResponse rsp; rsp.data.sendId = SENDIDS; rsp.data.type = -1; /* set header */ SetMsgHead(&(rsp.header), NEXT_RESPONSE, sizeof(rsp)); - int ret = WriteData(rsp, nullptr); - if (ret > 0) { - isNotified = true; + if ( WriteData(rsp, nullptr) <= 0) { + isNotified = false; } }