diff options
author | sangwan.kwon <sangwan.kwon@samsung.com> | 2016-05-19 19:08:38 +0900 |
---|---|---|
committer | sangwan.kwon <sangwan.kwon@samsung.com> | 2016-05-20 10:23:40 +0900 |
commit | 74fb2b737fe457a29f86ef5de0d0be44cf721bac (patch) | |
tree | effe43f43f6169237609f6e36b5d0b9108d6e5c7 /src | |
parent | 50f3dc1f3cf1304fe8e458980ecb22d18a9d5b2c (diff) | |
download | cert-checker-74fb2b737fe457a29f86ef5de0d0be44cf721bac.tar.gz cert-checker-74fb2b737fe457a29f86ef5de0d0be44cf721bac.tar.bz2 cert-checker-74fb2b737fe457a29f86ef5de0d0be44cf721bac.zip |
Apply timeout at g_main_loop
* If no event since cchecker launched, cchecker should exit
* timeout = 10 miniute
Change-Id: Ie472171c597e6dc4ffda1674bc859e26a066d9ca
Diffstat (limited to 'src')
-rw-r--r-- | src/service/logic.cpp | 31 | ||||
-rw-r--r-- | src/service/logic.h | 17 | ||||
-rw-r--r-- | src/service/ocsp-service.cpp | 2 | ||||
-rw-r--r-- | src/service/ocsp-service.h | 2 |
4 files changed, 38 insertions, 14 deletions
diff --git a/src/service/logic.cpp b/src/service/logic.cpp index 086dbf5..aed5006 100644 --- a/src/service/logic.cpp +++ b/src/service/logic.cpp @@ -233,14 +233,19 @@ error_t Logic::setup() return REGISTER_CALLBACK_ERROR; } + // Init for gio timeout. + m_is_first_run = false; + LogDebug("Register package event handler success"); return NO_ERROR; } -void Logic::run() +void Logic::run(guint timeout) { LogDebug("Running the main loop"); + + g_timeout_add_seconds(timeout, timeout_cb, m_loop); g_main_loop_run(m_loop); } @@ -552,12 +557,14 @@ void Logic::process_all() for(;;) { std::unique_lock<std::mutex> lock(m_mutex_cv); - // TODO(sangwan.kwon) Should wake up about OCSP_CHECK_AGAIN case - if(m_queue.empty() && !m_is_online_enabled) { // Wait condition. + // Wait condition. + if(m_queue.empty() && !m_is_online_enabled) { LogDebug("[thread] wait condition <queue, Network> : " << !m_queue.empty() << ", " << get_online()); m_to_process.wait(lock); // spurious wakeups do not concern us + LogDebug("[thread] wake up! running stage"); + m_is_first_run = true; } // Value for prevent infinite loop. @@ -579,7 +586,7 @@ void Logic::process_all() } else { LogDebug("[thread] Check again : " << m_buffer.size()); // Timer running periodically - timerStart(3600); + timerStart(TIMEOUT_TIMER); } } else if (!get_online()) { LogDebug("[thread] No network. Buffer won't be processed."); @@ -673,7 +680,23 @@ bool Logic::get_should_exit(void) const void Logic::set_should_exit(void) { m_should_exit = true; +} + +std::atomic<bool> Logic::m_is_first_run(false); + +bool Logic::is_gmain_loop_running() +{ + return g_main_loop_is_running(m_loop); +} + +gboolean Logic::timeout_cb(gpointer data) +{ + if (!m_is_first_run) { + LogDebug("No event Since cchecker launched. timeout."); + g_main_loop_quit(static_cast<GMainLoop *>(data)); + } + return FALSE; } } // namespace CCHECKER diff --git a/src/service/logic.h b/src/service/logic.h index f54dddc..a7d9ff9 100644 --- a/src/service/logic.h +++ b/src/service/logic.h @@ -44,6 +44,8 @@ namespace CCHECKER { +const int TIMEOUT_TIMER = 3600; + namespace DB { class SqlQuery; } // namespace DB @@ -67,7 +69,8 @@ class Logic : public Timer { Logic(void); virtual ~Logic(void); error_t setup(void); - void run(void); + void run(guint timeout); + bool is_gmain_loop_running(); virtual void clean(void); static void connman_callback(GDBusProxy *proxy, @@ -94,7 +97,6 @@ class Logic : public Timer { private: error_t setup_db(); void load_database_to_buffer(); - void add_app_to_buffer_and_database(const app_t &app); void remove_app_from_buffer_and_database(const app_t &app); @@ -109,6 +111,7 @@ class Logic : public Timer { GVariant *parameters, void *logic_ptr) ); + bool get_online(void) const; static int pkgmgrinfo_event_handler_static( uid_t uid, @@ -119,7 +122,6 @@ class Logic : public Timer { const char *val, const void *pmsg, void *data); - int pkgmgrinfo_event_handler( uid_t uid, int reqid, @@ -129,22 +131,18 @@ class Logic : public Timer { const char *val, const void *pmsg, void *data); - int push_pkgmgrinfo_event(uid_t uid, const char *pkgid); - void process_all(void); void process_queue(void); - bool process_app(app_t& app); void process_buffer(void); - - bool get_online(void) const; - bool get_should_exit(void) const; bool call_ui(const app_t &app); + static gboolean timeout_cb(gpointer data); + // main event loop data type GMainLoop *m_loop; @@ -157,6 +155,7 @@ class Logic : public Timer { // TODO: use m_queue for online events bool m_is_online_enabled; bool m_should_exit; + static std::atomic<bool> m_is_first_run; GDBusProxy *m_proxy_connman; diff --git a/src/service/ocsp-service.cpp b/src/service/ocsp-service.cpp index a028048..3f99da1 100644 --- a/src/service/ocsp-service.cpp +++ b/src/service/ocsp-service.cpp @@ -43,7 +43,7 @@ void OcspService::onMessageProcess(const ConnShPtr &connection) connection->send(this->process(connection, in)); // Run gmainloop for event listening. - m_logic.run(); + m_logic.run(TIMEOUT_G_SERVICE); LogDebug("Finish processing message on ocsp service."); } diff --git a/src/service/ocsp-service.h b/src/service/ocsp-service.h index 1f497cc..3016967 100644 --- a/src/service/ocsp-service.h +++ b/src/service/ocsp-service.h @@ -28,6 +28,8 @@ namespace CCHECKER { +const int TIMEOUT_G_SERVICE = 600; // 10 minutes + class OcspService : public Service { public: OcspService(const std::string &address); |