From 48e81711146e16170606d83856bc2a5d20b100bc Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Fri, 23 Feb 2018 14:49:24 +0530 Subject: [PATCH] pthread: fix pthread_once behavior, if mux (handle) is in external PSRAM Signed-off-by: Mahavir Jain --- components/pthread/pthread.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/components/pthread/pthread.c b/components/pthread/pthread.c index 8083947e4..0ce185425 100644 --- a/components/pthread/pthread.c +++ b/components/pthread/pthread.c @@ -335,14 +335,16 @@ int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) return EINVAL; } - // Check if once_control belongs to internal DRAM for uxPortCompare to succeed - if (!esp_ptr_internal(once_control)) { - ESP_LOGE(TAG, "%s: once_control should belong to internal DRAM region!", __FUNCTION__); - return EINVAL; - } - uint32_t res = 1; - uxPortCompareSet((uint32_t *) &once_control->init_executed, 0, &res); +#if defined(CONFIG_SPIRAM_SUPPORT) + if (esp_ptr_external_ram(once_control)) { + uxPortCompareSetExtram((uint32_t *) &once_control->init_executed, 0, &res); + } else { +#endif + uxPortCompareSet((uint32_t *) &once_control->init_executed, 0, &res); +#if defined(CONFIG_SPIRAM_SUPPORT) + } +#endif // Check if compare and set was successful if (res == 0) { ESP_LOGV(TAG, "%s: call init_routine %p", __FUNCTION__, once_control);