mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-03-23 14:33:05 +08:00
fix(ulog): Avoid async ulog empty wakeups and missed notifications
This commit is contained in:
@@ -635,7 +635,7 @@ static void do_output(rt_uint32_t level, const char *tag, rt_bool_t is_raw, cons
|
||||
{
|
||||
static rt_bool_t warned_async_log_buf = RT_FALSE;
|
||||
ulog_warn_once(&warned_async_log_buf,
|
||||
"Warning: There is no enough buffer for saving async log,"
|
||||
"Warning: There is not enough buffer for saving async log,"
|
||||
" please increase the ULOG_ASYNC_OUTPUT_BUF_SIZE option.\n");
|
||||
}
|
||||
}
|
||||
@@ -653,7 +653,7 @@ static void do_output(rt_uint32_t level, const char *tag, rt_bool_t is_raw, cons
|
||||
{
|
||||
static rt_bool_t warned_async_raw_partial = RT_FALSE;
|
||||
ulog_warn_once(&warned_async_raw_partial,
|
||||
"Warning: There is no enough buffer for saving async raw log,"
|
||||
"Warning: There is not enough buffer for saving async raw log,"
|
||||
" please increase the ULOG_ASYNC_OUTPUT_BUF_SIZE option.\n");
|
||||
}
|
||||
}
|
||||
@@ -1479,7 +1479,6 @@ void ulog_async_output_enabled(rt_bool_t enabled)
|
||||
*/
|
||||
rt_err_t ulog_async_waiting_log(rt_int32_t time)
|
||||
{
|
||||
rt_sem_control(&ulog.async_notice, RT_IPC_CMD_RESET, RT_NULL);
|
||||
return rt_sem_take(&ulog.async_notice, time);
|
||||
}
|
||||
|
||||
@@ -1569,6 +1568,12 @@ int ulog_init(void)
|
||||
return -RT_ENOMEM;
|
||||
}
|
||||
rt_sem_init(&ulog.async_notice, "ulog", 0, RT_IPC_FLAG_FIFO);
|
||||
/*
|
||||
* Use binary-semaphore semantics for async_notice.
|
||||
* This relies on ulog_async_output() draining all pending logs in one wakeup,
|
||||
* so coalescing multiple notices will not lose log data.
|
||||
*/
|
||||
rt_sem_control(&ulog.async_notice, RT_IPC_CMD_SET_VLIMIT, (void *)1);
|
||||
#endif /* ULOG_USING_ASYNC_OUTPUT */
|
||||
|
||||
#ifdef ULOG_USING_FILTER
|
||||
|
||||
Reference in New Issue
Block a user