| 1683 | } |
| 1684 | |
| 1685 | static void application_auto_index_cancel_join(cbm_daemon_application_t *application, |
| 1686 | cbm_daemon_application_job_t *job) { |
| 1687 | if (!application || !job) { |
| 1688 | return; |
| 1689 | } |
| 1690 | uint64_t deadline = application_deadline_after(APPLICATION_BACKGROUND_REAP_MS); |
| 1691 | for (;;) { |
| 1692 | cbm_mutex_lock(&application->mutex); |
| 1693 | bool terminal = job->terminal && job->thread_done; |
| 1694 | if (terminal) { |
| 1695 | application_job_unsubscribe_locked(job); |
| 1696 | } |
| 1697 | cbm_mutex_unlock(&application->mutex); |
| 1698 | if (terminal) { |
| 1699 | application_jobs_reap_completed(application); |
| 1700 | return; |
| 1701 | } |
| 1702 | if (cbm_now_ms() >= deadline) { |
| 1703 | application_cleanup_force_terminate("auto_index_cleanup"); |
| 1704 | } |
| 1705 | cbm_usleep(APPLICATION_JOB_POLL_US); |
| 1706 | } |
| 1707 | } |
| 1708 | |
| 1709 | static void application_update_cancel_locked(cbm_daemon_application_t *application) { |
| 1710 | if (!application->update_generation_started || application->update_thread_done) { |
no test coverage detected