| 164 | } |
| 165 | |
| 166 | bool cbm_daemon_maintenance_monitor_stop(cbm_daemon_maintenance_monitor_t **monitor_io) { |
| 167 | if (!monitor_io || !*monitor_io) { |
| 168 | return false; |
| 169 | } |
| 170 | cbm_daemon_maintenance_monitor_t *monitor = *monitor_io; |
| 171 | atomic_store_explicit(&monitor->stopping, true, memory_order_release); |
| 172 | if (cbm_thread_join(&monitor->thread) != 0) { |
| 173 | return false; |
| 174 | } |
| 175 | free(monitor); |
| 176 | *monitor_io = NULL; |
| 177 | return true; |
| 178 | } |
| 179 | |
| 180 | static void frontend_exit_for_maintenance(frontend_state_t *state) { |
| 181 | cbm_version_cohort_maintenance_presence_t presence = |
no test coverage detected