From: Dongwoo Lee Date: Thu, 7 Mar 2024 06:53:19 +0000 (+0900) Subject: monitor: Prevent possible deadlock and psuedo wakeup X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c473cb987dd8af7a061fecbda7ce4af0badaf67f;p=platform%2Fcore%2Fsystem%2Fpass.git monitor: Prevent possible deadlock and psuedo wakeup Change-Id: I040e53817b102cb5db6c557fec914912f450302e Signed-off-by: Dongwoo Lee --- diff --git a/src/monitor/monitor-command.c b/src/monitor/monitor-command.c index b9b9a08..adc1567 100644 --- a/src/monitor/monitor-command.c +++ b/src/monitor/monitor-command.c @@ -22,16 +22,14 @@ static void _monitor_command_wait_done(struct monitor_command *cmd, int polling) { + mtx_lock(&cmd->lock); while (!cmd->done) { smp_rmb(); if (polling-- <= 0) { - mtx_lock(&cmd->lock); cnd_wait(&cmd->signal, &cmd->lock); - mtx_unlock(&cmd->lock); - /* done at this time */ - break; } } + mtx_unlock(&cmd->lock); } void monitor_command_wait_done(struct monitor_command *cmd) diff --git a/src/monitor/monitor-thread.c b/src/monitor/monitor-thread.c index 5c2dc8e..663b73e 100644 --- a/src/monitor/monitor-thread.c +++ b/src/monitor/monitor-thread.c @@ -28,17 +28,18 @@ static int monitor_func(void *data, void **result) struct monitor *monitor = data; struct monitor_command *cmd; + mtx_lock(&monitor->lock); new_command: if (dequeue(monitor->q, (void *)&cmd) < 0) { if (empty_counter++ > MONITOR_POLLING_DURATION) { empty_counter = 0; - mtx_lock(&monitor->lock); cnd_wait(&monitor->signal, &monitor->lock); - mtx_unlock(&monitor->lock); goto new_command; } + mtx_unlock(&monitor->lock); return THREAD_RETURN_CONTINUE; } + mtx_unlock(&monitor->lock); syscommon_resman_monitor_update_resource_attrs(cmd->resource_id);