From 9f59bc8cfa37468a7e91eff99e8270a1bb1d215c Mon Sep 17 00:00:00 2001 From: dozreg-toplud Date: Mon, 11 May 2026 19:06:11 +0200 Subject: [PATCH] nock: %drop hint to discard ford caches --- pkg/noun/manage.c | 8 ++++++++ pkg/noun/nock.c | 6 ++++++ pkg/noun/options.h | 1 + 3 files changed, 15 insertions(+) diff --git a/pkg/noun/manage.c b/pkg/noun/manage.c index ae6b4517c5..b0357b7e88 100644 --- a/pkg/noun/manage.c +++ b/pkg/noun/manage.c @@ -1525,6 +1525,14 @@ u3m_soft_top(c3_w mil_w, // timer ms */ u3z(arg); + /* Clear build caches if needed. + */ + if ( !u3R->par_p && (u3C.wag_w & u3o_free_ford) ) { + u3h_free(u3R->cax.for_p); + u3R->cax.for_p = u3h_new_cache(u3C.per_w); + u3C.wag_w &= ~(c3_w)u3o_free_ford; + } + /* Return the product. */ return pro; diff --git a/pkg/noun/nock.c b/pkg/noun/nock.c index c3bd7a8e17..171f335daa 100644 --- a/pkg/noun/nock.c +++ b/pkg/noun/nock.c @@ -1032,6 +1032,7 @@ _n_bint(u3_noun* ops, u3_noun hif, u3_noun nef, c3_o los_o, c3_o tel_o) case c3__nara: case c3__hela: case c3__loop: + case c3__drop: case c3__bout: { u3_noun fen = u3_nul; c3_w nef_w = _n_comp(&fen, nef, los_o, c3n); @@ -1920,6 +1921,11 @@ _n_hilt_fore(u3_noun hin, u3_noun bus, u3_noun* out) *out = u3i_cell(tag, u3i_cell(har, per)); } break; + case c3__drop: { + u3C.wag_w |= u3o_free_ford; + *out = u3_nul; + } break; + case c3__loop: { u3_noun key = u3nc(u3k(bus), u3k(fol)); if ( u3_none != u3h_git(u3R->lop_p, key) ) { diff --git a/pkg/noun/options.h b/pkg/noun/options.h index 31e97d34b6..4d0b4a03b2 100644 --- a/pkg/noun/options.h +++ b/pkg/noun/options.h @@ -47,6 +47,7 @@ u3o_toss = 1 << 13, // reclaim often u3o_leak_crash = 1 << 14, // crash if leak when gc u3o_yolo = 1 << 15, // no brakes! + u3o_free_ford = 1 << 16, // free ford caches when done }; /** Globals.