| 254 | } |
| 255 | |
| 256 | static bool poll_until_terminal(cbm_subprocess_t *process, int timeout_ms, cbm_proc_result_t *out) { |
| 257 | uint64_t deadline = cbm_now_ms() + (uint64_t)timeout_ms; |
| 258 | do { |
| 259 | cbm_proc_poll_t state = cbm_subprocess_poll(process, out); |
| 260 | if (state == CBM_PROC_POLL_TERMINAL) { |
| 261 | return true; |
| 262 | } |
| 263 | if (state == CBM_PROC_POLL_ERROR) { |
| 264 | return false; |
| 265 | } |
| 266 | subprocess_test_pause(); |
| 267 | } while (cbm_now_ms() < deadline); |
| 268 | return cbm_subprocess_poll(process, out) == CBM_PROC_POLL_TERMINAL; |
| 269 | } |
| 270 | |
| 271 | static bool make_tree_pid_path(char path[64]) { |
| 272 | strcpy(path, "/tmp/cbm-subprocess-tree-XXXXXX"); |
no test coverage detected