| 458 | } |
| 459 | |
| 460 | void cbm_watcher_touch(cbm_watcher_t *w, const char *project_name) { |
| 461 | if (!w || !project_name) { |
| 462 | return; |
| 463 | } |
| 464 | cbm_mutex_lock(&w->projects_lock); |
| 465 | project_state_t *s = cbm_ht_get(w->projects, project_name); |
| 466 | if (s) { |
| 467 | /* Reset backoff — poll immediately on next cycle */ |
| 468 | s->next_poll_ns = 0; |
| 469 | } |
| 470 | cbm_mutex_unlock(&w->projects_lock); |
| 471 | } |
| 472 | |
| 473 | int cbm_watcher_watch_count(cbm_watcher_t *w) { |
| 474 | if (!w) { |
no test coverage detected