| 1422 | } |
| 1423 | |
| 1424 | static void application_job_publish(cbm_daemon_application_job_t *job, |
| 1425 | application_job_execution_t *execution) { |
| 1426 | if (!execution->response) { |
| 1427 | execution->response = application_job_failure_response( |
| 1428 | execution->have_last_result ? &execution->last_result : NULL, |
| 1429 | execution->last_log[0] ? execution->last_log : NULL); |
| 1430 | } |
| 1431 | cbm_daemon_application_t *application = job->application; |
| 1432 | cbm_mutex_lock(&application->mutex); |
| 1433 | job->response = execution->response; |
| 1434 | job->successful = execution->successful; |
| 1435 | job->cancelled = execution->have_last_result && execution->last_result.cancellation_requested; |
| 1436 | job->supervision_failed = execution->supervision_failed || |
| 1437 | (execution->unsafe_terminal && execution->have_last_result && |
| 1438 | !execution->last_result.cancellation_requested); |
| 1439 | job->terminal = true; |
| 1440 | job->thread_done = true; |
| 1441 | for (cbm_daemon_application_session_t *session = application->sessions; session; |
| 1442 | session = session->next) { |
| 1443 | if (session->auto_index_job != job || !session->auto_index_subscribed) { |
| 1444 | continue; |
| 1445 | } |
| 1446 | session->auto_index_job = NULL; |
| 1447 | session->auto_index_subscribed = false; |
| 1448 | application_job_unsubscribe_locked(job); |
| 1449 | if (job->successful) { |
| 1450 | application_refresh_watch_locked(session); |
| 1451 | } |
| 1452 | } |
| 1453 | application_auto_index_retry_pending_locked(application); |
| 1454 | cbm_mutex_unlock(&application->mutex); |
| 1455 | } |
| 1456 | |
| 1457 | static void *application_job_thread(void *opaque) { |
| 1458 | cbm_daemon_application_job_t *job = opaque; |
no test coverage detected