| 442 | } |
| 443 | |
| 444 | static cbm_version_cohort_quiesce_result_t cli_activation_request_quiescence(void *opaque) { |
| 445 | cli_activation_production_context_t *context = opaque; |
| 446 | if (!context || !context->endpoint) { |
| 447 | return CBM_VERSION_COHORT_QUIESCE_ERROR; |
| 448 | } |
| 449 | |
| 450 | /* Never acquire startup while maintenance+admission are held EX. A |
| 451 | * bootstrap participant can already hold both its lifetime SH and startup |
| 452 | * while it discovers maintenance; waiting here would invert its teardown |
| 453 | * order and time out both sides. OP8 is safe to attempt directly. An |
| 454 | * absent endpoint or lost ACK is not mutation authority: the finite |
| 455 | * lifetime-EX wait below remains the authoritative drain proof. */ |
| 456 | uint64_t control = cli_activation_deadline_after(CLI_ACTIVATION_CONTROL_TIMEOUT_MS); |
| 457 | context->control_deadline_ms = control < context->deadline_ms ? control : context->deadline_ms; |
| 458 | cbm_daemon_runtime_activation_result_t result = {0}; |
| 459 | if (cbm_daemon_runtime_request_activation_shutdown( |
| 460 | context->endpoint, &context->identity, context->action, |
| 461 | cli_activation_remaining_timeout(context), &result)) { |
| 462 | cli_activation_merge_daemon_result(context, &result); |
| 463 | } |
| 464 | context->shutdown_requested = true; |
| 465 | return CBM_VERSION_COHORT_QUIESCE_REQUESTED; |
| 466 | } |
| 467 | |
| 468 | static void cli_activation_release_cleanup_lease(cli_activation_production_context_t *context, |
| 469 | cbm_version_cohort_lease_t **lease_io) { |
nothing calls this directly
no test coverage detected