From: Vyacheslav Cherkashin Date: Tue, 26 Jun 2018 20:34:52 +0000 (+0300) Subject: Fix third start fails X-Git-Tag: accepted/tizen/unified/20180718.071534~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=17670ed35cb31fe42eda81766a4f7b8903296500;p=platform%2Fcore%2Fsystem%2Fswap-manager.git Fix third start fails Problem: - RequestQueue::do_all() can not processed all requests because Request::execute() can throw exception. Solution: - Encapsulate catching exceptions to Request::execute(). Change-Id: I5d9bba24c3d57948068997ccd61438853ab3fbcf Signed-off-by: Vyacheslav Cherkashin --- diff --git a/daemon/cpp/events/evloop.cpp b/daemon/cpp/events/evloop.cpp index 4806233..ed6b128 100644 --- a/daemon/cpp/events/evloop.cpp +++ b/daemon/cpp/events/evloop.cpp @@ -88,13 +88,13 @@ public: handler_(handler) {} - void execute() +private: + void do_execute() override { LOGI("ADD: handler[%p fd=%d]\n", handler_, handler_->fd()); epoll_add_handler(efd_, handler_); } -private: int efd_; Handler *handler_; }; @@ -109,7 +109,8 @@ public: deleter_(deleter) {} - void execute() +private: + void do_execute() override { skip_list_->add(handler_); @@ -119,7 +120,6 @@ public: deleter_(handler_); } -private: int efd_; SkipList *skip_list_; diff --git a/daemon/cpp/events/evloop_request.h b/daemon/cpp/events/evloop_request.h index c882c14..e8963d4 100644 --- a/daemon/cpp/events/evloop_request.h +++ b/daemon/cpp/events/evloop_request.h @@ -28,6 +28,7 @@ #include #include +#include namespace EvLoop { @@ -36,7 +37,19 @@ namespace EvLoop { class Request { public: virtual ~Request() {} - virtual void execute() = 0; + void execute() + { + try { + do_execute(); + } catch (const std::runtime_error &e) { + LOGE("%s\n", e.what()); + } catch (...) { + LOGE("Unknown error\n"); + } + } + +private: + virtual void do_execute() = 0; };