From a3c2a44af4d13ae1bcc3de197f189187a5fabb21 Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Mon, 12 Oct 2020 14:33:32 +0900 Subject: [PATCH] Fix dbus call of default_pmlock_check() For non-killable daemons, the return of resourced's CheckAppStatus is always ignored. Therefore, fix not to call CheckAppStatus when the pmlock_check is checking non-killable daemon, not app. Change-Id: Ifeef32754c9d94a18ad302b97927407de91b83d8 Signed-off-by: Youngjae Cho Signed-off-by: lokilee73 --- src/display/display-lock.c | 48 ++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/display/display-lock.c b/src/display/display-lock.c index c7d88c7..2df1497 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -64,15 +64,34 @@ static void refresh_app_cond() trans_condition |= MASK_OFF; } +static void broadcast_pmlock_expired(pid_t pid, enum state_t state, const char* appid, time_t locktime) +{ + time_t now; + double diff; + int ret; + + time(&now); + diff = difftime(now, locktime); + + CRITICAL_LOG("%s(%d) has held %s lock for a long time(%.0f s).", + appid ? appid : "NULL", pid, state_st(state)->name + 2, diff); + + ret = dbus_handle_emit_dbus_signal(NULL, + DEVICED_PATH_DISPLAY, + DEVICED_INTERFACE_DISPLAY, + "pmlock_expired", + g_variant_new("(ii)", pid, (int)diff)); + if (ret < 0) + _E("Failed to send dbus pmlock_expired"); +} + static void default_pmlock_check_cb(GVariant *var, void *user_data, GError *err) { pid_t pid = 0; - int ret, detected = 0; + int detected = 0; char *app_id = NULL; enum state_t state = (enum state_t) user_data; PmLockNode *node; - time_t now; - double diff; if (!var) return; @@ -82,26 +101,14 @@ static void default_pmlock_check_cb(GVariant *var, void *user_data, GError *err) goto out; } - if (is_app(pid) == 1 && !detected) + if (!detected) goto out; node = find_node(state, pid); if (!node) goto out; - time(&now); - diff = difftime(now, node->time); - - CRITICAL_LOG("%s(%d) has held %s lock for a long time(%.0f s).", - app_id, pid, state_st(state)->name + 2, diff); - - ret = dbus_handle_emit_dbus_signal(NULL, - DEVICED_PATH_DISPLAY, - DEVICED_INTERFACE_DISPLAY, - "pmlock_expired", - g_variant_new("(ii)", pid, (int)diff)); - if (ret < 0) - _E("Failed to send dbus pmlock_expired"); + broadcast_pmlock_expired(pid, state, app_id, node->time); out: if (app_id) @@ -140,6 +147,13 @@ static gboolean default_pmlock_check(void *data) return G_SOURCE_REMOVE; } + if (!is_app(pid)) { + /* For (non-killable) daemon, + * no need to ask resourced if it is abnormal lock */ + broadcast_pmlock_expired(pid, state, NULL, node->time); + return G_SOURCE_CONTINUE; + } + snprintf(chr_pid, sizeof(chr_pid), "%d", pid); arr[0] = chr_pid; switch (state) { -- 2.7.4