| 2149 | } |
| 2150 | |
| 2151 | static char *application_job_wait_for_session(cbm_daemon_application_session_t *session, |
| 2152 | cbm_daemon_application_job_t *job) { |
| 2153 | cbm_daemon_application_t *application = session->application; |
| 2154 | for (;;) { |
| 2155 | cbm_mutex_lock(&application->mutex); |
| 2156 | if (session->active_job != job || !session->active_job_subscribed) { |
| 2157 | cbm_mutex_unlock(&application->mutex); |
| 2158 | return cbm_mcp_text_result("index operation cancelled for this session", true); |
| 2159 | } |
| 2160 | if (job->terminal) { |
| 2161 | char *response = job->response ? strdup(job->response) : NULL; |
| 2162 | session->active_job = NULL; |
| 2163 | session->active_job_subscribed = false; |
| 2164 | application_job_unsubscribe_locked(job); |
| 2165 | cbm_mutex_unlock(&application->mutex); |
| 2166 | application_jobs_reap_completed(application); |
| 2167 | return response ? response |
| 2168 | : cbm_mcp_text_result("index coordinator lost its result", true); |
| 2169 | } |
| 2170 | cbm_mutex_unlock(&application->mutex); |
| 2171 | cbm_usleep(APPLICATION_JOB_POLL_US); |
| 2172 | } |
| 2173 | } |
| 2174 | |
| 2175 | static char *application_index_execute(void *context, const char *root_path, |
| 2176 | const char *args_json) { |
no test coverage detected