| 140 | } |
| 141 | |
| 142 | cbm_daemon_maintenance_monitor_t *cbm_daemon_maintenance_monitor_start( |
| 143 | cbm_version_cohort_manager_t *manager, cbm_daemon_maintenance_cancel_fn cancel, |
| 144 | void *cancel_context, int exit_code, const char *participant) { |
| 145 | if (!manager || exit_code < 0 || !participant || !participant[0]) { |
| 146 | return NULL; |
| 147 | } |
| 148 | cbm_daemon_maintenance_monitor_t *monitor = calloc(1, sizeof(*monitor)); |
| 149 | if (!monitor) { |
| 150 | return NULL; |
| 151 | } |
| 152 | monitor->manager = manager; |
| 153 | monitor->cancel = cancel; |
| 154 | monitor->cancel_context = cancel_context; |
| 155 | monitor->exit_code = exit_code; |
| 156 | atomic_init(&monitor->stopping, false); |
| 157 | int written = snprintf(monitor->participant, sizeof(monitor->participant), "%s", participant); |
| 158 | if (written <= 0 || written >= (int)sizeof(monitor->participant) || |
| 159 | cbm_thread_create(&monitor->thread, 0, frontend_maintenance_monitor_worker, monitor) != 0) { |
| 160 | free(monitor); |
| 161 | return NULL; |
| 162 | } |
| 163 | return monitor; |
| 164 | } |
| 165 | |
| 166 | bool cbm_daemon_maintenance_monitor_stop(cbm_daemon_maintenance_monitor_t **monitor_io) { |
| 167 | if (!monitor_io || !*monitor_io) { |
no test coverage detected