| 1182 | } |
| 1183 | |
| 1184 | static int build_full_task_set(Config *config, struct TaskList *current_tasks, |
| 1185 | task_stats_summary_t *current_stats_summary, build_task_set_result_t *result) |
| 1186 | { |
| 1187 | struct TaskList *tasks = malloc(sizeof(struct TaskList)); |
| 1188 | if (!tasks) |
| 1189 | { |
| 1190 | log_error("malloc failed"); |
| 1191 | return -1; |
| 1192 | } |
| 1193 | struct TaskErrorList *errors = malloc(sizeof(struct TaskErrorList)); |
| 1194 | if (errors == NULL) |
| 1195 | { |
| 1196 | log_error("malloc failed"); |
| 1197 | free(tasks); |
| 1198 | return -1; |
| 1199 | } |
| 1200 | TAILQ_INIT(tasks); |
| 1201 | TAILQ_INIT(errors); |
| 1202 | |
| 1203 | task_t *item; |
| 1204 | task_t *titem; |
| 1205 | |
| 1206 | char errbuf[ERROR_BUFFER_SIZE]; |
| 1207 | TaskConfig *task_config; |
| 1208 | for (int i = 0; i < config->tasks_cfg->num_tasks; ++i) |
| 1209 | { |
| 1210 | task_config = config->tasks_cfg->tasks[i]; |
| 1211 | task_t *existing_task = find_task_by_fingerprint(task_config->fingerprint, current_tasks); |
| 1212 | if (existing_task) |
| 1213 | { |
| 1214 | // reuse existing task |
| 1215 | task_t *task = task_wrapper_new(i, task_config->fingerprint, existing_task->task); |
| 1216 | if (!task) |
| 1217 | goto error; |
| 1218 | TAILQ_INSERT_TAIL(tasks, task, next); |
| 1219 | log_info("existing task-%d, fingerprint=%s", i, task_config->fingerprint); |
| 1220 | continue; |
| 1221 | } |
| 1222 | |
| 1223 | // create new task |
| 1224 | capture_task_t *cap_task = capture_task_new(config->tasks_cfg, task_config, current_stats_summary, errbuf); |
| 1225 | if (!cap_task) |
| 1226 | { |
| 1227 | log_error("new task-%d error: %s", i, errbuf); |
| 1228 | task_error_t *error = task_error_new(i, task_config->fingerprint, errbuf); |
| 1229 | if (!error) |
| 1230 | goto error; |
| 1231 | TAILQ_INSERT_TAIL(errors, error, next); |
| 1232 | continue; |
| 1233 | } |
| 1234 | |
| 1235 | task_t *task = task_wrapper_new(i, task_config->fingerprint, cap_task); |
| 1236 | if (!task) |
| 1237 | { |
| 1238 | capture_task_destroy(cap_task); |
| 1239 | goto error; |
| 1240 | } |
| 1241 | log_info("create task-%d success", i); |
no test coverage detected