Fix service and mainloop prepare logic 02/194602/2 accepted/tizen/4.0/unified/20181207.174720 submit/tizen_4.0/20181206.072604
authoryeji kim <yeji01.kim@samsung.com>
Thu, 6 Dec 2018 06:35:04 +0000 (15:35 +0900)
committeryeji kim <yeji01.kim@samsung.com>
Thu, 6 Dec 2018 06:37:24 +0000 (15:37 +0900)
Change-Id: I95a8f0a6dae43730c4cef3bf6d32ede6c63c8329
Signed-off-by: yeji kim <yeji01.kim@samsung.com>
include/klay/rmi/service.h
src/mainloop.cpp
src/rmi/service.cpp

index b5158f79b56c84d83bd27efa2c0288ea3e1df6c0..dab9ab1332e5ababec5db6fed91acb6c06eff4d8 100644 (file)
@@ -201,6 +201,8 @@ private:
                Credentials credentials;
        };
 
+       void prepare(bool activiation);
+
        typedef std::list<std::shared_ptr<Connection>> ConnectionRegistry;
        typedef std::function<void(const std::shared_ptr<Connection>& connection)> CallbackDispatcher;
 
@@ -240,6 +242,7 @@ private:
        std::mutex methodRegistryLock;
 
        static thread_local ProcessingContext processingContext;
+       std::unique_ptr<Socket> socket;
 };
 
 template<typename Type, typename... Args>
index 9272247fba3e1269d1a29cbcda227ca48ad05b8f..92321ea54747ea9feeff29b53b1933b61332a01d 100644 (file)
@@ -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);
        }
index ab86f196ab7acae2d4c8c78ac6965cb1c5f90d20..070fe280a30ebea972c3d973e73a4f051039f037 100644 (file)
@@ -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<Connection>(socket.accept()));
+               onNewConnection(std::make_shared<Connection>(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);
 }