in c_pal_ll/linux/src/threadapi_pthreads.c [35:83]
THREADAPI_RESULT ThreadAPI_Create(THREAD_HANDLE* threadHandle, THREAD_START_FUNC func, void* arg)
{
THREADAPI_RESULT result;
if ((threadHandle == NULL) ||
(func == NULL))
{
result = THREADAPI_INVALID_ARG;
LogError("(result = %" PRI_MU_ENUM ")", MU_ENUM_VALUE(THREADAPI_RESULT, result));
}
else
{
THREAD_INSTANCE* threadInstance = malloc(sizeof(THREAD_INSTANCE));
if (threadInstance == NULL)
{
result = THREADAPI_NO_MEMORY;
LogError("(result = %" PRI_MU_ENUM ")", MU_ENUM_VALUE(THREADAPI_RESULT, result));
}
else
{
threadInstance->ThreadStartFunc = func;
threadInstance->Arg = arg;
int createResult = pthread_create(&threadInstance->Pthread_handle, NULL, ThreadWrapper, threadInstance);
switch (createResult)
{
default:
free(threadInstance);
result = THREADAPI_ERROR;
LogError("(result = %" PRI_MU_ENUM ")", MU_ENUM_VALUE(THREADAPI_RESULT, result));
break;
case 0:
*threadHandle = threadInstance;
result = THREADAPI_OK;
break;
case EAGAIN:
free(threadInstance);
result = THREADAPI_NO_MEMORY;
LogError("(result = %" PRI_MU_ENUM ")", MU_ENUM_VALUE(THREADAPI_RESULT, result));
break;
}
}
}
return result;
}