Does FreeRTOS allow creation of Queues, Mutexes, and Semaphores within Critical Regions?

The FAQ: http://www.freertos.org/FAQHelp.html States: “I get stuck on the line that starts for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); Likely causes include: […snip…] Calling an API function from within a critical section or when the RTOS scheduler is suspended.” Can this prohibition be clarified to limit calls to API functions which might run the scheduler within taskENTER_CRITICAL() regions? That is, allow API functions that don’t run the scheduler? To provide easy to use contracts between modules, I’d like to use lazy instantiation of communication mechanisms like this: ~~~~~~ :::c xQueueHandle getValidAppQueue(void) { static xQueueHandle appStateQueueHandle = 0; taskENTERCRITICAL(); if (!appStateQueueHandle) { appStateQueueHandle = xQueueCreate(1, sizeof( appStateQueueType)); } taskEXITCRITICAL(); return appStateQueueHandle; } ~~~~~~ But the FAQ implies that by calling XQueueCreate within a critical region, I’m violating the FreeRTOS API. -Thoughts? -Mike