| 1478 | } |
| 1479 | |
| 1480 | static void application_job_publish(cbm_daemon_application_job_t *job, |
| 1481 | application_job_execution_t *execution) { |
| 1482 | if (!execution->response) { |
| 1483 | execution->response = application_job_failure_response( |
| 1484 | execution->have_last_result ? &execution->last_result : NULL, |
| 1485 | execution->last_log[0] ? execution->last_log : NULL); |
| 1486 | } |
| 1487 | cbm_daemon_application_t *application = job->application; |
| 1488 | cbm_mutex_lock(&application->mutex); |
| 1489 | job->response = execution->response; |
| 1490 | job->successful = execution->successful; |
| 1491 | job->cancelled = execution->have_last_result && execution->last_result.cancellation_requested; |
| 1492 | job->supervision_failed = execution->supervision_failed || |
| 1493 | (execution->unsafe_terminal && execution->have_last_result && |
| 1494 | !execution->last_result.cancellation_requested); |
| 1495 | job->terminal = true; |
| 1496 | job->thread_done = true; |
| 1497 | for (cbm_daemon_application_session_t *session = application->sessions; session; |
| 1498 | session = session->next) { |
| 1499 | if (session->auto_index_job != job || !session->auto_index_subscribed) { |
| 1500 | continue; |
| 1501 | } |
| 1502 | session->auto_index_job = NULL; |
| 1503 | session->auto_index_subscribed = false; |
| 1504 | application_job_unsubscribe_locked(job); |
| 1505 | if (job->successful) { |
| 1506 | application_refresh_watch_locked(session); |
| 1507 | } |
| 1508 | } |
| 1509 | application_auto_index_retry_pending_locked(application); |
| 1510 | cbm_mutex_unlock(&application->mutex); |
| 1511 | } |
| 1512 | |
| 1513 | static void *application_job_thread(void *opaque) { |
| 1514 | cbm_daemon_application_job_t *job = opaque; |
no test coverage detected