Lines Matching refs:task

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