diff --git a/arch/arm/src/arm/up_assert.c b/arch/arm/src/arm/up_assert.c index 60ca70b3e06..1009778f76e 100644 --- a/arch/arm/src/arm/up_assert.c +++ b/arch/arm/src/arm/up_assert.c @@ -282,6 +282,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || this_task()->pid == 0) @@ -319,6 +323,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -329,6 +337,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/arm/src/armv6-m/up_assert.c b/arch/arm/src/armv6-m/up_assert.c index 99c3f2cbae2..90f4648ccb3 100644 --- a/arch/arm/src/armv6-m/up_assert.c +++ b/arch/arm/src/armv6-m/up_assert.c @@ -336,6 +336,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || this_task()->pid == 0) @@ -373,6 +377,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -383,6 +391,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/arm/src/armv7-a/arm_assert.c b/arch/arm/src/armv7-a/arm_assert.c index 7f1e70e4c9f..b8019df7d0a 100644 --- a/arch/arm/src/armv7-a/arm_assert.c +++ b/arch/arm/src/armv7-a/arm_assert.c @@ -343,6 +343,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || this_task()->pid == 0) @@ -388,8 +392,13 @@ void up_assert(const uint8_t *filename, int lineno) #if CONFIG_TASK_NAME_SIZE > 0 && defined(CONFIG_DEBUG_ALERT) struct tcb_s *rtcb = this_task(); #endif + board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -397,8 +406,13 @@ void up_assert(const uint8_t *filename, int lineno) _alert("Assertion failed at file:%s line: %d\n", filename, lineno); #endif + up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/arm/src/armv7-m/up_assert.c b/arch/arm/src/armv7-m/up_assert.c index ab37542a39f..0bbb5a5eabd 100644 --- a/arch/arm/src/armv7-m/up_assert.c +++ b/arch/arm/src/armv7-m/up_assert.c @@ -353,6 +353,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || (this_task())->pid == 0) @@ -396,6 +400,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -406,6 +414,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/arm/src/armv7-r/arm_assert.c b/arch/arm/src/armv7-r/arm_assert.c index cc5d7187aa7..be382bd7760 100644 --- a/arch/arm/src/armv7-r/arm_assert.c +++ b/arch/arm/src/armv7-r/arm_assert.c @@ -337,6 +337,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || (this_task())->pid == 0) @@ -371,8 +375,13 @@ void up_assert(const uint8_t *filename, int lineno) #if CONFIG_TASK_NAME_SIZE > 0 && defined(CONFIG_DEBUG_ALERT) struct tcb_s *rtcb = this_task(); #endif + board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -380,8 +389,13 @@ void up_assert(const uint8_t *filename, int lineno) _alert("Assertion failed at file:%s line: %d\n", filename, lineno); #endif + up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/avr/src/common/up_assert.c b/arch/avr/src/common/up_assert.c index e7e70bc8864..7d4823ecba2 100644 --- a/arch/avr/src/common/up_assert.c +++ b/arch/avr/src/common/up_assert.c @@ -77,6 +77,10 @@ static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || this_task()->pid == 0) @@ -139,6 +143,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -149,6 +157,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/hc/src/m9s12/m9s12_assert.c b/arch/hc/src/m9s12/m9s12_assert.c index 87257f706a9..1f7886dce80 100644 --- a/arch/hc/src/m9s12/m9s12_assert.c +++ b/arch/hc/src/m9s12/m9s12_assert.c @@ -59,6 +59,7 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ + /* USB trace dumping */ #ifndef CONFIG_USBDEV_TRACE @@ -264,6 +265,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || (this_task())->pid == 0) @@ -301,6 +306,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -311,6 +320,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/mips/src/mips32/up_assert.c b/arch/mips/src/mips32/up_assert.c index 259d1406198..c2dac36df55 100644 --- a/arch/mips/src/mips32/up_assert.c +++ b/arch/mips/src/mips32/up_assert.c @@ -76,6 +76,10 @@ static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || this_task()->pid == 0) @@ -138,6 +142,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -148,6 +156,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_ARCH_USBDUMP /* Dump USB trace data */ diff --git a/arch/misoc/src/lm32/lm32_assert.c b/arch/misoc/src/lm32/lm32_assert.c index 0dfb71126ad..ee6ad299962 100644 --- a/arch/misoc/src/lm32/lm32_assert.c +++ b/arch/misoc/src/lm32/lm32_assert.c @@ -77,6 +77,10 @@ static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || this_task()->pid == 0) @@ -139,6 +143,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -155,6 +163,10 @@ void up_assert(const uint8_t *filename, int lineno) (void)usbtrace_enumerate(assert_tracecallback, NULL); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/or1k/src/common/up_assert.c b/arch/or1k/src/common/up_assert.c index 56170d932aa..555ccf000cc 100644 --- a/arch/or1k/src/common/up_assert.c +++ b/arch/or1k/src/common/up_assert.c @@ -341,6 +341,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || this_task()->pid == 0) @@ -378,6 +382,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -388,6 +396,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/renesas/src/common/up_assert.c b/arch/renesas/src/common/up_assert.c index 682761ff983..4388c86215d 100644 --- a/arch/renesas/src/common/up_assert.c +++ b/arch/renesas/src/common/up_assert.c @@ -78,6 +78,10 @@ static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || this_task()->pid == 0) @@ -140,6 +144,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -156,6 +164,10 @@ void up_assert(const uint8_t *filename, int lineno) (void)usbtrace_enumerate(assert_tracecallback, NULL); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/risc-v/src/rv32im/up_assert.c b/arch/risc-v/src/rv32im/up_assert.c index 8774e5ec9b9..c403f0f1a9b 100644 --- a/arch/risc-v/src/rv32im/up_assert.c +++ b/arch/risc-v/src/rv32im/up_assert.c @@ -59,6 +59,7 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ + /* USB trace dumping */ #ifndef CONFIG_USBDEV_TRACE @@ -76,6 +77,10 @@ static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || this_task()->pid == 0) @@ -138,6 +143,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -154,6 +163,10 @@ void up_assert(const uint8_t *filename, int lineno) (void)usbtrace_enumerate(assert_tracecallback, NULL); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/x86/src/common/up_assert.c b/arch/x86/src/common/up_assert.c index 3b9d00cac2c..1edd9f6ec92 100644 --- a/arch/x86/src/common/up_assert.c +++ b/arch/x86/src/common/up_assert.c @@ -226,6 +226,10 @@ static void up_dumpstate(void) static void _up_assert(int errorcode) noreturn_function; static void _up_assert(int errorcode) { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (g_current_regs || (this_task())->pid == 0) @@ -263,6 +267,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -273,6 +281,10 @@ void up_assert(const uint8_t *filename, int lineno) up_dumpstate(); + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/xtensa/src/common/xtensa_assert.c b/arch/xtensa/src/common/xtensa_assert.c index b3379337fe0..9cf9bcb7cf4 100644 --- a/arch/xtensa/src/common/xtensa_assert.c +++ b/arch/xtensa/src/common/xtensa_assert.c @@ -116,6 +116,10 @@ static void xtensa_assert(int errorcode) board_crashdump(up_getsp(), this_task(), filename, lineno); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (CURRENT_REGS || this_task()->pid == 0) @@ -157,6 +161,10 @@ void up_assert(const uint8_t *filename, int lineno) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", filename, lineno, rtcb->name); @@ -200,6 +208,10 @@ void xtensa_panic(int xptcode, uint32_t *regs) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the panic) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("Unhandled Exception %d task: %s\n", xptcode, rtcb->name); #else @@ -300,6 +312,10 @@ void xtensa_user(int exccause, uint32_t *regs) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the error) */ + + (void)syslog_flush(); + #if CONFIG_TASK_NAME_SIZE > 0 _alert("User Exception: EXCCAUSE=%04x task: %s\n", exccause, rtcb->name); #else diff --git a/arch/z16/src/common/up_assert.c b/arch/z16/src/common/up_assert.c index 3384969bcf2..0f2414333c0 100644 --- a/arch/z16/src/common/up_assert.c +++ b/arch/z16/src/common/up_assert.c @@ -77,6 +77,10 @@ static void _up_assert(int errorcode) /* noreturn_function */ { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (up_interrupt_context() || this_task()->pid == 0) @@ -143,6 +147,10 @@ void up_assert(void) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #ifdef CONFIG_HAVE_FILENAME #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", @@ -168,6 +176,10 @@ void up_assert(void) (void)usbtrace_enumerate(assert_tracecallback, NULL); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/arch/z80/src/common/up_assert.c b/arch/z80/src/common/up_assert.c index 7aef249b4c0..68fa3f13b07 100644 --- a/arch/z80/src/common/up_assert.c +++ b/arch/z80/src/common/up_assert.c @@ -76,6 +76,10 @@ static void _up_assert(int errorcode) /* noreturn_function */ { + /* Flush any buffered SYSLOG data */ + + (void)syslog_flush(); + /* Are we in an interrupt handler or the idle task? */ if (up_interrupt_context() || this_task()->pid == 0) @@ -142,6 +146,10 @@ void up_assert(void) board_autoled_on(LED_ASSERTION); + /* Flush any buffered SYSLOG data (from prior to the assertion) */ + + (void)syslog_flush(); + #ifdef CONFIG_HAVE_FILENAME #if CONFIG_TASK_NAME_SIZE > 0 _alert("Assertion failed at file:%s line: %d task: %s\n", @@ -167,6 +175,10 @@ void up_assert(void) (void)usbtrace_enumerate(assert_tracecallback, NULL); #endif + /* Flush any buffered SYSLOG data (from the above) */ + + (void)syslog_flush(); + #ifdef CONFIG_BOARD_CRASHDUMP board_crashdump(up_getsp(), this_task(), filename, lineno); #endif diff --git a/drivers/syslog/syslog_flush.c b/drivers/syslog/syslog_flush.c index bd30c8a506a..8207ffae22d 100644 --- a/drivers/syslog/syslog_flush.c +++ b/drivers/syslog/syslog_flush.c @@ -60,6 +60,14 @@ * Interrupts are disabled at the time of the crash and this logic must * perform the flush using low-level, non-interrupt driven logic. * + * REVISIT: There is an implementation problem in that if a character + * driver is the underlying device, then there is no mechanism to flush + * the data buffered in the driver with interrupts disabled. + * + * Currently, this function on (a) dumps the interrupt buffer (if the + * SYSLOG interrupt buffer is enabled), and (b) only the SYSLOG interface + * supports supports the 'sc_force()' method. + * * Input Parameters: * ch - The character to add to the SYSLOG (must be positive). * @@ -69,16 +77,9 @@ * ****************************************************************************/ -#if 0 -/* REVISIT: (1) Not yet integrated into assertion handlers and (2) there is - * an implementation problem in that if a character driver is the underlying - * device, then there is no mechanism to flush the data buffered in the - * driver with interrupts disabled. - */ - int syslog_flush(void) { - DEBUGASSERT(g_syslog_channel != NULL && g_syslog_channel->sc_flush != NULL); + DEBUGASSERT(g_syslog_channel != NULL); #ifdef CONFIG_SYSLOG_INTBUFFER /* Flush any characters that may have been added to the interrupt @@ -88,8 +89,12 @@ int syslog_flush(void) (void)syslog_flush_intbuffer(g_syslog_channel, true); #endif +#if 0 /* Then flush all of the buffered output to the SYSLOG device */ + DEBUGASSERT(g_syslog_channel->sc_flush != NULL); return g_syslog_channel->sc_flush(); -} +#else + return 0; #endif +} diff --git a/include/nuttx/syslog/syslog.h b/include/nuttx/syslog/syslog.h index ced488cfb6a..b4926a03565 100644 --- a/include/nuttx/syslog/syslog.h +++ b/include/nuttx/syslog/syslog.h @@ -243,6 +243,14 @@ int syslog_file_channel(FAR const char *devpath); * Interrupts are disabled at the time of the crash and this logic must * perform the flush using low-level, non-interrupt driven logic. * + * REVISIT: There is an implementation problem in that if a character + * driver is the underlying device, then there is no mechanism to flush + * the data buffered in the driver with interrupts disabled. + * + * Currently, this function on (a) dumps the interrupt buffer (if the + * SYSLOG interrupt buffer is enabled), and (b) only the SYSLOG interface + * supports supports the 'sc_force()' method. + * * Input Parameters: * None * @@ -252,15 +260,7 @@ int syslog_file_channel(FAR const char *devpath); * ****************************************************************************/ -#if 0 -/* REVISIT: (1) Not yet integrated into assertion handlers and (2) there is - * an implementation problem in that if a character driver is the underlying - * device, then there is no mechanism to flush the data buffered in the - * driver with interrupts disabled. - */ - int syslog_flush(void); -#endif /**************************************************************************** * Name: nx_vsyslog