From bb2516a349b7c3c930b1afff66378904349b3e22 Mon Sep 17 00:00:00 2001 From: yaomanhai Date: Wed, 4 Aug 2021 06:33:36 +0000 Subject: [PATCH] fixed 96b84e0 from https://gitee.com/blancwu/hiviewdfx_hilog/pulls/28 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 a3a12fd..9727133 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 ea6d7ee..0faf359 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; } } -- Gitee