| 786 | } |
| 787 | |
| 788 | static void cbm_win_begin_termination(cbm_subprocess_t *process, uint64_t now) { |
| 789 | if (process->termination_started) { |
| 790 | return; |
| 791 | } |
| 792 | process->termination_started = true; |
| 793 | process->termination_started_ms = now; |
| 794 | /* Best effort only: services and detached parents may have no shared console. |
| 795 | * The Job Object remains the authoritative force-containment boundary. */ |
| 796 | (void)GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, process->process_id); |
| 797 | } |
| 798 | |
| 799 | static void cbm_win_force_tree(cbm_subprocess_t *process, uint64_t now) { |
| 800 | if (process->force_sent) { |
no outgoing calls
no test coverage detected