From cb3d46786d9a89427429a7ed96294d1db1f99170 Mon Sep 17 00:00:00 2001 From: liuzhifu Date: Tue, 23 Aug 2016 20:10:42 +0800 Subject: [PATCH] enable sys_arch_protect/sys_arch_unprotect with portENTER_CRITICAL/portEXIT_CRITICAL --- components/lwip/port/freertos/sys_arch.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/components/lwip/port/freertos/sys_arch.c b/components/lwip/port/freertos/sys_arch.c index bdbdcc57bd..e7d919e5db 100755 --- a/components/lwip/port/freertos/sys_arch.c +++ b/components/lwip/port/freertos/sys_arch.c @@ -231,6 +231,10 @@ sys_mbox_trypost(sys_mbox_t *mbox, void *msg) { err_t xReturn; + if (msg == NULL){ + LWIP_DEBUGF(THREAD_SAFE_DEBUG, ("&msg=%p\n", &msg)); + } + if (xQueueSend((*mbox)->os_mbox, &msg, (portTickType)0) == pdPASS) { xReturn = ERR_OK; } else { @@ -384,7 +388,7 @@ sys_mbox_free(sys_mbox_t *mbox) LWIP_DEBUGF(THREAD_SAFE_DEBUG, ("sys_mbox_free:free mbox\n")); -#if 0 //ESP32_WORKAROUND +#if 1 //ESP32_WORKAROUND if (uxQueueMessagesWaiting((*mbox)->os_mbox)) { xQueueReset((*mbox)->os_mbox); /* Line for breakpoint. Should never break here! */ @@ -434,6 +438,7 @@ sys_now(void) return xTaskGetTickCount(); } +static portMUX_TYPE g_lwip_mux = portMUX_INITIALIZER_UNLOCKED; /* This optional function does a "fast" critical region protection and returns the previous protection level. This function is only called during very short @@ -450,7 +455,10 @@ sys_now(void) sys_prot_t sys_arch_protect(void) { -// vTaskEnterCritical(); +#if 1//ESP32_WORKAROUND + //vTaskEnterCritical(); + portENTER_CRITICAL(&g_lwip_mux); +#endif return (sys_prot_t) 1; } @@ -465,7 +473,10 @@ void sys_arch_unprotect(sys_prot_t pval) { (void) pval; -// vTaskExitCritical(); +#if 1 //ESP32_WORKAROUND + //vTaskExitCritical(); + portEXIT_CRITICAL(&g_lwip_mux); +#endif } /*-----------------------------------------------------------------------------------*/