u3: allocate emergency buffer on every road, free on bail for trace cells

(cherry picked from commit 3a11a08b712b52805f97ceb06da8417a8b7cbde4)
This commit is contained in:
Joe Bryan 2022-06-29 23:30:26 -04:00 committed by Peter McEvoy
parent eaf47ce0cf
commit 146db7b832

View File

@ -361,7 +361,9 @@ _cm_signal_deep(c3_w mil_w)
// go utterly haywire. // go utterly haywire.
// //
if ( 0 == u3H->rod_u.bug.mer ) { if ( 0 == u3H->rod_u.bug.mer ) {
u3H->rod_u.bug.mer = u3i_string("emergency buffer"); u3H->rod_u.bug.mer = u3i_string(
"emergency buffer with sufficient space to cons the trace and bail"
);
} }
if ( mil_w ) { if ( mil_w ) {
@ -731,6 +733,11 @@ u3m_bail(u3_noun how)
u3m_signal(how); u3m_signal(how);
} }
// release the emergency buffer, ensuring space for cells
//
u3z(u3R->bug.mer);
u3R->bug.mer = 0;
/* Reconstruct a correct error ball. /* Reconstruct a correct error ball.
*/ */
if ( _(u3ud(how)) ) { if ( _(u3ud(how)) ) {
@ -900,6 +907,10 @@ u3m_hate(c3_w pad_w)
u3R->ear_p = u3R->cap_p; u3R->ear_p = u3R->cap_p;
u3m_leap(pad_w); u3m_leap(pad_w);
u3R->bug.mer = u3i_string(
"emergency buffer with sufficient space to cons the trace and bail"
);
} }
/* u3m_love(): return product from leap. /* u3m_love(): return product from leap.