Calling xTaskCreate from within a task

Is it safe to call xTaskCreate() from within a task that is then removed from memory, either by exiting normally or being killed off before the second tasks completes? I can see that doing this will obviously cause memory fragmentation, but could there be any other side effects or lack of portability?

Calling xTaskCreate from within a task

xTaskCreate() can be called from within a task.  There is no link between the task that created it and the created task so you can safely delete either one without upsetting the other. To delete a task you must call vTaskDelete(), not just run off the end of the task function.  You can do this: void task( void* ) {     while( 1 )     {         task code.     }     vTaskDelete( NULL ); } to delete the task if the while loop ever exits.

Calling xTaskCreate from within a task

I did not know about the mandatory calling of vTaskDelete(NULL) before a task function reaches its end.  Is this mandatory in all cases?