Просмотр исходного кода

Merge branch 'bugfix/revisit_pthread_once' into 'master'

pthread: fix pthread_once behavior, if mux (handle) is in external PSRAM

See merge request idf/esp-idf!1972
Angus Gratton 8 лет назад
Родитель
Сommit
dbaea72062
1 измененных файлов с 9 добавлено и 7 удалено
  1. 9 7
      components/pthread/pthread.c

+ 9 - 7
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);