THREAD_FUNC_RETURN_TYPE TaskScheduler::ThreadStart(void *arg) { ThreadStartArgs *threadArgs = reinterpret_cast<ThreadStartArgs *>(arg); TaskScheduler *taskScheduler = threadArgs->taskScheduler; uint index = threadArgs->threadIndex; // Clean up delete threadArgs; // Get a free fiber to switch to std::size_t freeFiberIndex = taskScheduler->GetNextFreeFiberIndex(); // Initialize tls taskScheduler->m_tls[index].CurrentFiberIndex = freeFiberIndex; // Switch taskScheduler->m_tls[index].ThreadFiber.SwitchToFiber(&taskScheduler->m_fibers[freeFiberIndex]); // And we've returned // Cleanup and shutdown FTLEndCurrentThread(); THREAD_FUNC_END; }