mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-31 05:11:19 +00:00 
			
		
		
		
	 32242988ed
			
		
	
	
		32242988ed
		
			
		
	
	
	
	
		
			
			Apply clang-format for C source files in folder core/app-mgr, core/app-framework, and test-tools. And rename folder component_test to component-test, update zephyr build document. Signed-off-by: Wenyong Huang <wenyong.huang@intel.com>
		
			
				
	
	
		
			141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2019 Intel Corporation.  All rights reserved.
 | |
|  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
|  */
 | |
| 
 | |
| #include "watchdog.h"
 | |
| #include "bh_platform.h"
 | |
| 
 | |
| #define WATCHDOG_THREAD_PRIORITY 5
 | |
| 
 | |
| /* Queue of watchdog */
 | |
| static bh_queue *watchdog_queue;
 | |
| 
 | |
| #ifdef WATCHDOG_ENABLED /* TODO */
 | |
| static void
 | |
| watchdog_timer_callback(void *timer)
 | |
| {
 | |
|     watchdog_timer *wd_timer =
 | |
|         app_manager_get_wd_timer_from_timer_handle(timer);
 | |
| 
 | |
|     watchdog_timer_stop(wd_timer);
 | |
| 
 | |
|     os_mutex_lock(&wd_timer->lock);
 | |
| 
 | |
|     if (!wd_timer->is_stopped) {
 | |
| 
 | |
|         wd_timer->is_interrupting = true;
 | |
| 
 | |
|         bh_post_msg(watchdog_queue, WD_TIMEOUT, wd_timer->module_data,
 | |
|                     sizeof(module_data));
 | |
|     }
 | |
| 
 | |
|     os_mutex_unlock(&wd_timer->lock);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| bool
 | |
| watchdog_timer_init(module_data *m_data)
 | |
| {
 | |
| #ifdef WATCHDOG_ENABLED /* TODO */
 | |
|     watchdog_timer *wd_timer = &m_data->wd_timer;
 | |
| 
 | |
|     if (0 != os_mutex_init(&wd_timer->lock))
 | |
|         return false;
 | |
| 
 | |
|     if (!(wd_timer->timer_handle =
 | |
|               app_manager_timer_create(watchdog_timer_callback, wd_timer))) {
 | |
|         os_mutex_destroy(&wd_timer->lock);
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     wd_timer->module_data = m_data;
 | |
|     wd_timer->is_interrupting = false;
 | |
|     wd_timer->is_stopped = false;
 | |
| #endif
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| void
 | |
| watchdog_timer_destroy(watchdog_timer *wd_timer)
 | |
| {
 | |
| #ifdef WATCHDOG_ENABLED /* TODO */
 | |
|     app_manager_timer_destroy(wd_timer->timer_handle);
 | |
|     os_mutex_destroy(&wd_timer->lock);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void
 | |
| watchdog_timer_start(watchdog_timer *wd_timer)
 | |
| {
 | |
|     os_mutex_lock(&wd_timer->lock);
 | |
| 
 | |
|     wd_timer->is_interrupting = false;
 | |
|     wd_timer->is_stopped = false;
 | |
|     app_manager_timer_start(wd_timer->timer_handle,
 | |
|                             wd_timer->module_data->timeout);
 | |
| 
 | |
|     os_mutex_unlock(&wd_timer->lock);
 | |
| }
 | |
| 
 | |
| void
 | |
| watchdog_timer_stop(watchdog_timer *wd_timer)
 | |
| {
 | |
|     app_manager_timer_stop(wd_timer->timer_handle);
 | |
| }
 | |
| 
 | |
| #ifdef WATCHDOG_ENABLED /* TODO */
 | |
| static void
 | |
| watchdog_queue_callback(void *queue_msg)
 | |
| {
 | |
|     if (bh_message_type(queue_msg) == WD_TIMEOUT) {
 | |
|         module_data *m_data = (module_data *)bh_message_payload(queue_msg);
 | |
|         if (g_module_interfaces[m_data->module_type]
 | |
|             && g_module_interfaces[m_data->module_type]->module_watchdog_kill) {
 | |
|             g_module_interfaces[m_data->module_type]->module_watchdog_kill(
 | |
|                 m_data);
 | |
|             app_manager_post_applets_update_event();
 | |
|         }
 | |
|     }
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifdef WATCHDOG_ENABLED /* TODO */
 | |
| static void *
 | |
| watchdog_thread_routine(void *arg)
 | |
| {
 | |
|     /* Enter loop run */
 | |
|     bh_queue_enter_loop_run(watchdog_queue, watchdog_queue_callback);
 | |
| 
 | |
|     (void)arg;
 | |
|     return NULL;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| bool
 | |
| watchdog_startup()
 | |
| {
 | |
|     if (!(watchdog_queue = bh_queue_create())) {
 | |
|         app_manager_printf(
 | |
|             "App Manager start failed: create watchdog queue failed.\n");
 | |
|         return false;
 | |
|     }
 | |
| #if 0
 | |
| //todo: enable watchdog
 | |
|     /* Start watchdog thread */
 | |
|     if (!jeff_runtime_create_supervisor_thread_with_prio(watchdog_thread_routine, NULL,
 | |
|                     WATCHDOG_THREAD_PRIORITY)) {
 | |
|         bh_queue_destroy(watchdog_queue);
 | |
|         return false;
 | |
|     }
 | |
| #endif
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| void
 | |
| watchdog_destroy()
 | |
| {
 | |
|     bh_queue_exit_loop_run(watchdog_queue);
 | |
|     bh_queue_destroy(watchdog_queue);
 | |
| }
 |