Lines Matching refs:task
61 TaskNode *task; member
106 static int AddExecutor(ThreadManager *mgr, const TaskNode *task) in AddExecutor() argument
108 ListNode *node = task->executorList.next; in AddExecutor()
109 while (node != &task->executorList) { in AddExecutor()
112 task->taskId, mgr->executorCount, executor->task->taskId); in AddExecutor()
134 APPSPAWN_LOGV("RunExecutor task: %{public}u", executor->task->taskId); in RunExecutor()
135 atomic_fetch_add(&executor->task->finishTaskCount, 1); in RunExecutor()
136 executor->executor(executor->task->taskId, executor->context); in RunExecutor()
148 TaskNode *task = ListEntry(node, TaskNode, node); in TaskCompareTaskId() local
149 return task->taskId - *(uint32_t *)data; in TaskCompareTaskId()
164 static void DeleteTask(TaskNode *task) in DeleteTask() argument
166 APPSPAWN_LOGV("DeleteTask task: %{public}u ", task->taskId); in DeleteTask()
168 if (!ListEmpty(task->node)) { in DeleteTask()
171 OH_ListRemoveAll(&task->executorList, NULL); in DeleteTask()
172 pthread_cond_destroy(&task->cond); in DeleteTask()
173 pthread_mutex_destroy(&task->mutex); in DeleteTask()
174 free(task); in DeleteTask()
179 TaskNode *task = NULL; in PopTask() local
185 task = ListEntry(node, TaskNode, node); in PopTask()
188 return task; in PopTask()
191 static void PushTask(ThreadManager *mgr, TaskNode *task, ListNode *queue) in PushTask() argument
194 OH_ListAddTail(queue, &task->node); in PushTask()
199 static void SafeRemoveTask(ThreadManager *mgr, TaskNode *task) in SafeRemoveTask() argument
202 OH_ListRemove(&task->node); in SafeRemoveTask()
203 OH_ListInit(&task->node); in SafeRemoveTask()
206 ListNode *node = task->executorList.next; in SafeRemoveTask()
207 while (node != &task->executorList) { in SafeRemoveTask()
220 node = task->executorList.next; in SafeRemoveTask()
226 TaskNode *task = PopTask(mgr, &mgr->waitingTaskQueue); in ExecuteTask() local
227 if (task == NULL) { in ExecuteTask()
231 APPSPAWN_LOGV("ExecuteTask task: %{public}u ", task->taskId); in ExecuteTask()
232 AddExecutor(mgr, task); in ExecuteTask()
233 PushTask(mgr, task, &mgr->executingTaskQueue); in ExecuteTask()
239 TaskNode *task = PopTask(mgr, &mgr->executingTaskQueue); in CheckTaskComplete() local
240 if (task == NULL) { in CheckTaskComplete()
243 if (task->totalTask <= atomic_load(&task->finishTaskCount)) { in CheckTaskComplete()
244 if (task->finishProcess != NULL) { in CheckTaskComplete()
245 task->finishProcess(task->taskId, task->context); in CheckTaskComplete()
246 DeleteTask(task); in CheckTaskComplete()
249 pthread_mutex_lock(&task->mutex); in CheckTaskComplete()
250 pthread_cond_signal(&task->cond); in CheckTaskComplete()
251 pthread_mutex_unlock(&task->mutex); in CheckTaskComplete()
254 PushTask(mgr, task, &mgr->executingTaskQueue); in CheckTaskComplete()
261 TaskNode *task = ListEntry(node, TaskNode, node); in TaskQueueDestroyProc() local
262 DeleteTask(task); in TaskQueueDestroyProc()
342 TaskNode *task = (TaskNode *)malloc(sizeof(TaskNode)); in ThreadMgrAddTask() local
343 APPSPAWN_CHECK(task != NULL, return -1, "Failed to create thread task"); in ThreadMgrAddTask()
345 task->context = NULL; in ThreadMgrAddTask()
346 task->finishProcess = NULL; in ThreadMgrAddTask()
347 task->totalTask = 0; in ThreadMgrAddTask()
348 atomic_init(&task->taskFlags, 0); in ThreadMgrAddTask()
349 atomic_init(&task->finishTaskCount, 0); in ThreadMgrAddTask()
350 OH_ListInit(&task->node); in ThreadMgrAddTask()
351 OH_ListInit(&task->executorList); in ThreadMgrAddTask()
352 pthread_mutex_init(&task->mutex, NULL); in ThreadMgrAddTask()
353 SetCondAttr(&task->cond); in ThreadMgrAddTask()
356 task->taskId = mgr->currTaskId++; in ThreadMgrAddTask()
357 OH_ListAddTail(&mgr->taskList, &task->node); in ThreadMgrAddTask()
359 *taskHandle = task->taskId; in ThreadMgrAddTask()
360 APPSPAWN_LOGV("Create thread task success task id: %{public}u", task->taskId); in ThreadMgrAddTask()
369 TaskNode *task = GetTask(mgr, &mgr->taskList, taskHandle); in ThreadMgrAddExecutor() local
370 APPSPAWN_CHECK(task != NULL, return -1, "Invalid thread task %{public}u", taskHandle); in ThreadMgrAddExecutor()
374 node->task = task; in ThreadMgrAddExecutor()
379 task->totalTask++; in ThreadMgrAddExecutor()
380 OH_ListAddTail(&task->executorList, &node->node); in ThreadMgrAddExecutor()
388 TaskNode *task = GetTask(mgr, &mgr->taskList, taskHandle); in ThreadMgrCancelTask() local
389 if (task != NULL) { in ThreadMgrCancelTask()
390 SafeRemoveTask(mgr, task); in ThreadMgrCancelTask()
391 DeleteTask(task); in ThreadMgrCancelTask()
394 task = GetTask(mgr, &mgr->waitingTaskQueue, taskHandle); in ThreadMgrCancelTask()
395 if (task != NULL) { in ThreadMgrCancelTask()
396 SafeRemoveTask(mgr, task); in ThreadMgrCancelTask()
397 DeleteTask(task); in ThreadMgrCancelTask()
400 task = GetTask(mgr, &mgr->executingTaskQueue, taskHandle); in ThreadMgrCancelTask()
401 if (task != NULL) { in ThreadMgrCancelTask()
402 SafeRemoveTask(mgr, task); in ThreadMgrCancelTask()
403 DeleteTask(task); in ThreadMgrCancelTask()
413 TaskNode *task = GetTask(mgr, &mgr->taskList, taskHandle); in TaskSyncExecute() local
414 APPSPAWN_CHECK(task != NULL, return -1, "Invalid thread task %{public}u", taskHandle); in TaskSyncExecute()
416 pthread_mutex_lock(&task->mutex); in TaskSyncExecute()
417 OH_ListRemove(&task->node); in TaskSyncExecute()
418 OH_ListInit(&task->node); in TaskSyncExecute()
419 OH_ListAddTail(&mgr->waitingTaskQueue, &task->node); in TaskSyncExecute()
421 pthread_mutex_unlock(&task->mutex); in TaskSyncExecute()
422 APPSPAWN_LOGV("TaskSyncExecute task: %{public}u", task->taskId); in TaskSyncExecute()
427 pthread_mutex_lock(&task->mutex); in TaskSyncExecute()
428 ret = pthread_cond_timedwait(&task->cond, &task->mutex, &abstime); in TaskSyncExecute()
429 pthread_mutex_unlock(&task->mutex); in TaskSyncExecute()
430 … APPSPAWN_LOGV("TaskSyncExecute success task id: %{public}u ret: %{public}d", task->taskId, ret); in TaskSyncExecute()
433 DeleteTask(task); in TaskSyncExecute()
442 TaskNode *task = GetTask(mgr, &mgr->taskList, taskHandle); in TaskExecute() local
443 APPSPAWN_CHECK(task != NULL, return -1, "Invalid thread task %{public}u", taskHandle); in TaskExecute()
445 task->finishProcess = process; in TaskExecute()
446 task->context = context; in TaskExecute()
448 OH_ListRemove(&task->node); in TaskExecute()
449 OH_ListInit(&task->node); in TaskExecute()
450 OH_ListAddTail(&mgr->waitingTaskQueue, &task->node); in TaskExecute()
453 APPSPAWN_LOGV("TaskExecute task: %{public}u", task->taskId); in TaskExecute()