From d37c289b56fa1ea61c1371be9ea45ed71f63a663 Mon Sep 17 00:00:00 2001 From: armink Date: Fri, 13 Jul 2018 18:13:25 +0800 Subject: [PATCH] [kernel][idle] Improve rt_thread_idle_sethook and rt_thread_idle_delhook code. --- src/idle.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/idle.c b/src/idle.c index 3ee9c46cf5..d6c2f98a49 100644 --- a/src/idle.c +++ b/src/idle.c @@ -26,6 +26,7 @@ * dead thread. * 2016-08-09 ArdaFu add method to get the handler of the idle thread. * 2018-02-07 Bernard lock scheduler to protect tid->cleanup. + * 2018-07-14 armink add idle hook list */ #include @@ -75,6 +76,7 @@ rt_err_t rt_thread_idle_sethook(void (*hook)(void)) { rt_size_t i; rt_base_t level; + rt_err_t ret = -RT_EFULL; /* disable interrupt */ level = rt_hw_interrupt_disable(); @@ -84,16 +86,14 @@ rt_err_t rt_thread_idle_sethook(void (*hook)(void)) if (idle_hook_list[i] == RT_NULL) { idle_hook_list[i] = hook; - /* enable interrupt */ - rt_hw_interrupt_enable(level); - - return RT_EOK; + ret = RT_EOK; + break; } } /* enable interrupt */ rt_hw_interrupt_enable(level); - return -RT_EFULL; + return ret; } /** @@ -108,6 +108,7 @@ rt_err_t rt_thread_idle_delhook(void (*hook)(void)) { rt_size_t i; rt_base_t level; + rt_err_t ret = -RT_ENOSYS; /* disable interrupt */ level = rt_hw_interrupt_disable(); @@ -117,16 +118,14 @@ rt_err_t rt_thread_idle_delhook(void (*hook)(void)) if (idle_hook_list[i] == hook) { idle_hook_list[i] = RT_NULL; - /* enable interrupt */ - rt_hw_interrupt_enable(level); - - return RT_EOK; + ret = RT_EOK; + break; } } /* enable interrupt */ rt_hw_interrupt_enable(level); - return -RT_ENOSYS; + return ret; } #endif