S-1b follow-up: free the refused word's metrics context_window; correct the pipelining claim; review record

- vm_create_word()'s S-1b refusal path now calls transition_metrics_cleanup()
  before freeing the metrics struct (its context_window leaked).
- FABRIC-3.9.8: the transition_heat grow is untested -- ENABLE_PIPELINING=0
  in the kernel AND the default hosted build; the doc wrongly said hosted.
- Recorded the review: moving id tables have no unlocked or interrupt
  readers (heartbeat lookups hold dict_lock, as does the grow); sweep for
  other word-id-indexed arrays found none unbounded. Status line updated.

3-ISA acceptance passes; boot parity and dict_hash set unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-24 14:42:05 -04:00
co-authored by Claude Opus 5.5
parent 1dbd0c74ed
commit a2e3356b2e
9 changed files with 27559 additions and 4 deletions
+1
View File
@@ -535,6 +535,7 @@ DictEntry *vm_create_word(VM *vm, const char *name, size_t len, word_func_t func
if (vm_dictionary_track_entry(vm, entry) != 0) {
vm->error = 1;
if (entry->transition_metrics) {
transition_metrics_cleanup(entry->transition_metrics); /* its context_window too */
sf_free(entry->transition_metrics);
}
sf_free(entry);