| 774 | } |
| 775 | |
| 776 | static bool cbm_win_job_active(cbm_subprocess_t *process, bool *known) { |
| 777 | JOBOBJECT_BASIC_ACCOUNTING_INFORMATION accounting; |
| 778 | ZeroMemory(&accounting, sizeof(accounting)); |
| 779 | if (!QueryInformationJobObject(process->job, JobObjectBasicAccountingInformation, &accounting, |
| 780 | sizeof(accounting), NULL)) { |
| 781 | *known = false; |
| 782 | return true; /* fail closed: an unqueryable job is never declared quiescent */ |
| 783 | } |
| 784 | *known = true; |
| 785 | return accounting.ActiveProcesses != 0; |
| 786 | } |
| 787 | |
| 788 | static void cbm_win_begin_termination(cbm_subprocess_t *process, uint64_t now) { |
| 789 | if (process->termination_started) { |
no outgoing calls
no test coverage detected