diff --git a/base/src/event_demultiplexer.cpp b/base/src/event_demultiplexer.cpp index 34c109e79088f518e917160631feda7904730425..a42958fc32dcca1dd4c9bbefb793c82c82036d3d 100644 --- a/base/src/event_demultiplexer.cpp +++ b/base/src/event_demultiplexer.cpp @@ -106,9 +106,8 @@ uint32_t EventDemultiplexer::Update(int operation, EventHandler* handler) return TIMER_ERR_OK; } -int EventDemultiplexer::Polling(int timeout /* ms */) +int EventDemultiplexer::Polling(int timeout /* ms */, std::vector& epollEvents) { - std::vector epollEvents(maxEvents_); std::vector> taskQue; std::vector eventQue; @@ -156,6 +155,7 @@ int EventDemultiplexer::Polling(int timeout /* ms */) if (nfds == maxEvents_) { maxEvents_ *= HALF_OF_MAX_EVENT; + epollEvents.resize(maxEvents_); } return nfds; } diff --git a/base/src/event_demultiplexer.h b/base/src/event_demultiplexer.h index 02b2d9a6a31a6e2af335635977486a66a87171f4..3aea06eef53fa8844239436eae30d818403a54ce 100644 --- a/base/src/event_demultiplexer.h +++ b/base/src/event_demultiplexer.h @@ -22,6 +22,8 @@ #include #include #include +#include +#include namespace OHOS { namespace Utils { @@ -38,10 +40,12 @@ public: uint32_t StartUp(); void CleanUp(); - int Polling(int timeout); + int Polling(int timeout, std::vector& epollEvents); uint32_t UpdateEventHandler(EventHandler* handler); + int GetMaxEvents() const { return maxEvents_; } + private: uint32_t Update(int operation, EventHandler* handler); static uint32_t Reactor2Epoll(uint32_t reactorEvent); diff --git a/base/src/event_reactor.cpp b/base/src/event_reactor.cpp index c61471c213ed39c8fd524ec134f356c73c92eb47..ba06a8cf635b1f2ee96a465db040f798dbaf990d 100644 --- a/base/src/event_reactor.cpp +++ b/base/src/event_reactor.cpp @@ -71,8 +71,9 @@ void EventReactor::RunLoop(int timeout) const return; } + std::vector epollEvents(demultiplexer_->GetMaxEvents()); while (loopReady_ && switch_) { - if (demultiplexer_->Polling(timeout) == EPOLL_CRITICAL_ERROR) { + if (demultiplexer_->Polling(timeout, epollEvents) == EPOLL_CRITICAL_ERROR) { UTILS_LOGD("polling critical error occure: %{public}d", timeout); break; }