From 83edd2fbbaa75f53d06ef5de1cae608c77e5ae39 Mon Sep 17 00:00:00 2001 From: Masayuki Ishikawa Date: Thu, 9 Dec 2021 14:09:34 +0900 Subject: [PATCH] sched: signal: Introduce a private spinlock in sig_action.c Summary: - This commit introduces a private spinlock in sig_action.c Impact: - None Testing: - Tested with spresense:wifi_smp and spresense:wifi Signed-off-by: Masayuki Ishikawa --- sched/signal/sig_action.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sched/signal/sig_action.c b/sched/signal/sig_action.c index dae2629c7d..2646197e4f 100644 --- a/sched/signal/sig_action.c +++ b/sched/signal/sig_action.c @@ -33,11 +33,18 @@ #include #include +#include #include "sched/sched.h" #include "group/group.h" #include "signal/signal.h" +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static spinlock_t g_sigaction_spin; + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -62,14 +69,14 @@ static void nxsig_alloc_actionblock(void) sigact = kmm_malloc((sizeof(sigactq_t)) * NUM_SIGNAL_ACTIONS); if (sigact != NULL) { - flags = spin_lock_irqsave(NULL); + flags = spin_lock_irqsave(&g_sigaction_spin); for (i = 0; i < NUM_SIGNAL_ACTIONS; i++) { sq_addlast((FAR sq_entry_t *)sigact++, &g_sigfreeaction); } - spin_unlock_irqrestore(NULL, flags); + spin_unlock_irqrestore(&g_sigaction_spin, flags); } } @@ -88,9 +95,9 @@ static FAR sigactq_t *nxsig_alloc_action(void) /* Try to get the signal action structure from the free list */ - flags = spin_lock_irqsave(NULL); + flags = spin_lock_irqsave(&g_sigaction_spin); sigact = (FAR sigactq_t *)sq_remfirst(&g_sigfreeaction); - spin_unlock_irqrestore(NULL, flags); + spin_unlock_irqrestore(&g_sigaction_spin, flags); /* Check if we got one. */ @@ -102,9 +109,9 @@ static FAR sigactq_t *nxsig_alloc_action(void) /* And try again */ - flags = spin_lock_irqsave(NULL); + flags = spin_lock_irqsave(&g_sigaction_spin); sigact = (FAR sigactq_t *)sq_remfirst(&g_sigfreeaction); - spin_unlock_irqrestore(NULL, flags); + spin_unlock_irqrestore(&g_sigaction_spin, flags); DEBUGASSERT(sigact); } @@ -403,7 +410,7 @@ void nxsig_release_action(FAR sigactq_t *sigact) /* Just put it back on the free list */ - flags = spin_lock_irqsave(NULL); + flags = spin_lock_irqsave(&g_sigaction_spin); sq_addlast((FAR sq_entry_t *)sigact, &g_sigfreeaction); - spin_unlock_irqrestore(NULL, flags); + spin_unlock_irqrestore(&g_sigaction_spin, flags); }