From 96b84e0bd3b3f40eeabfb9324719d62fa16d119f Mon Sep 17 00:00:00 2001 From: yaomanhai Date: Wed, 4 Aug 2021 06:33:36 +0000 Subject: [PATCH] hilog stucks when logs burst in a large number Signed-off-by: yaomanhai --- services/hilogd/log_buffer.cpp | 7 ++----- services/hilogd/log_querier.cpp | 9 ++++++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/services/hilogd/log_buffer.cpp b/services/hilogd/log_buffer.cpp index 6d5b0a9..af0539b 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 62ff430..94c4041 100644 --- a/services/hilogd/log_querier.cpp +++ b/services/hilogd/log_querier.cpp @@ -544,14 +544,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; } } -- Gitee