Test-only deterministic fault injection for the crash/hang supervisor tests. * Gated entirely behind env vars that are never set in production; a matching * rel_path either aborts (a fault signal the supervisor classifies as a crash) * or spins forever (an external-scanner infinite loop the quiet-timeout kills). * This gives an honest guard — green iff the supervisor actually contains a real
| 549 | * unlucky in-flight file is never quarantined alone. The env var is set |
| 550 | * solely by the supervisor during recovery — a no-op on normal runs. */ |
| 551 | static void cbm_index_mark(const char *rel_path, char event) { |
| 552 | const char *mf = getenv("CBM_INDEX_MARKER_FILE"); |
| 553 | if (!mf || !mf[0] || !rel_path || !rel_path[0]) { |
| 554 | return; |
| 555 | } |
| 556 | FILE *f = cbm_fopen(mf, "ab"); |
| 557 | if (f) { |
| 558 | (void)fprintf(f, "%c %s\n", event, rel_path); |
| 559 | (void)fclose(f); |
| 560 | } |
| 561 | } |
| 562 | |
| 563 | void cbm_index_mark_start(const char *rel_path) { |
| 564 | cbm_index_mark(rel_path, 'S'); |
no test coverage detected