Sustained-absence window (seconds) before a missing root may be pruned. * Generous default: 10 minutes. Override with CBM_WATCHER_PRUNE_GRACE_S * (>= 0; 0 prunes as soon as the missing-poll streak is reached). Read on * each call so tests/operators can adjust via setenv without a restart — * same convention as cbm_max_file_bytes in limits.c. */
| 318 | * each call so tests/operators can adjust via setenv without a restart — |
| 319 | * same convention as cbm_max_file_bytes in limits.c. */ |
| 320 | static long prune_grace_s(void) { |
| 321 | const char *raw = getenv("CBM_WATCHER_PRUNE_GRACE_S"); |
| 322 | if (raw && raw[0]) { |
| 323 | errno = 0; |
| 324 | char *end = NULL; |
| 325 | long v = strtol(raw, &end, 10); |
| 326 | if (errno == 0 && end != raw && *end == '\0' && v >= 0) { |
| 327 | return v; |
| 328 | } |
| 329 | /* Unparseable / negative → fall through to the safe default. */ |
| 330 | } |
| 331 | return PRUNE_GRACE_DEFAULT_S; |
| 332 | } |
| 333 | |
| 334 | /* Format int to string for logging (poll thread only, one use per call). */ |
| 335 | static const char *itoa_buf(int v) { |