From: yeji kim Date: Thu, 6 Dec 2018 06:35:04 +0000 (+0900) Subject: Fix service and mainloop prepare logic X-Git-Tag: submit/tizen_4.0/20181206.072604^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F02%2F194602%2F2;p=platform%2Fcore%2Fsecurity%2Fklay.git Fix service and mainloop prepare logic Change-Id: I95a8f0a6dae43730c4cef3bf6d32ede6c63c8329 Signed-off-by: yeji kim --- diff --git a/include/klay/rmi/service.h b/include/klay/rmi/service.h index b5158f7..dab9ab1 100644 --- a/include/klay/rmi/service.h +++ b/include/klay/rmi/service.h @@ -201,6 +201,8 @@ private: Credentials credentials; }; + void prepare(bool activiation); + typedef std::list> ConnectionRegistry; typedef std::function& connection)> CallbackDispatcher; @@ -240,6 +242,7 @@ private: std::mutex methodRegistryLock; static thread_local ProcessingContext processingContext; + std::unique_ptr socket; }; template diff --git a/src/mainloop.cpp b/src/mainloop.cpp index 9272247..92321ea 100644 --- a/src/mainloop.cpp +++ b/src/mainloop.cpp @@ -38,6 +38,8 @@ Mainloop::Mainloop() : if (pollFd == -1) { throw Exception(GetSystemErrorMessage()); } + + prepare(); } Mainloop::~Mainloop() @@ -141,8 +143,6 @@ void Mainloop::run(int timeout) bool done = false; stopped = false; - prepare(); - while (!stopped && !done) { done = !dispatch(timeout); } diff --git a/src/rmi/service.cpp b/src/rmi/service.cpp index ab86f19..070fe28 100644 --- a/src/rmi/service.cpp +++ b/src/rmi/service.cpp @@ -46,18 +46,24 @@ Service::~Service() { } -void Service::start(bool activation, int timeout) +void Service::prepare(bool activation) { - Socket socket(Socket::create(address, activation)); - + socket.reset(new Socket(Socket::create(address, activation))); auto accept = [&](int fd, runtime::Mainloop::Event event) { - onNewConnection(std::make_shared(socket.accept())); + onNewConnection(std::make_shared(socket->accept())); }; - mainloop.addEventSource(socket.getFd(), + mainloop.addEventSource(socket->getFd(), EPOLLIN | EPOLLHUP | EPOLLRDHUP, accept); +} + +void Service::start(bool activation, int timeout) +{ + if (socket == nullptr) { + prepare(activation); + } mainloop.run(timeout); }