| 215 | } |
| 216 | |
| 217 | static bool poll_until_terminal(cbm_subprocess_t *process, int timeout_ms, cbm_proc_result_t *out) { |
| 218 | uint64_t deadline = cbm_now_ms() + (uint64_t)timeout_ms; |
| 219 | do { |
| 220 | cbm_proc_poll_t state = cbm_subprocess_poll(process, out); |
| 221 | if (state == CBM_PROC_POLL_TERMINAL) { |
| 222 | return true; |
| 223 | } |
| 224 | if (state == CBM_PROC_POLL_ERROR) { |
| 225 | return false; |
| 226 | } |
| 227 | subprocess_test_pause(); |
| 228 | } while (cbm_now_ms() < deadline); |
| 229 | return cbm_subprocess_poll(process, out) == CBM_PROC_POLL_TERMINAL; |
| 230 | } |
| 231 | |
| 232 | static bool make_tree_pid_path(char path[64]) { |
| 233 | strcpy(path, "/tmp/cbm-subprocess-tree-XXXXXX"); |
no test coverage detected