diff --git a/pkg/noun/manage.c b/pkg/noun/manage.c index 8780b29215..d5cc793671 100644 --- a/pkg/noun/manage.c +++ b/pkg/noun/manage.c @@ -998,12 +998,6 @@ u3m_bail(u3_noun how) } } - // Reset the spin stack pointer - if ( NULL != stk_u ) { - stk_u->off_w = u3R->off_w; - stk_u->fow_w = u3R->fow_w; - } - _longjmp(u3R->esc.buf, how); } @@ -1134,10 +1128,10 @@ u3m_leap(c3_w pad_w) u3R->kid_p = u3of(u3_road, rod_u); } - // Add slow stack pointer to rod_u + // Stash slow stack pointer if ( NULL != stk_u ) { - rod_u->off_w = stk_u->off_w; - rod_u->fow_w = stk_u->fow_w; + u3R->off_w = stk_u->off_w; + u3R->fow_w = stk_u->fow_w; } /* Set up the new road. @@ -1353,6 +1347,12 @@ u3m_love(u3_noun pro) if ( _(tim_o) ) _m_renew_now(); + // restore slow stack pointer + if ( NULL != stk_u ) { + stk_u->off_w = u3R->off_w; + stk_u->fow_w = u3R->fow_w; + } + // copy product and caches off our stack // pro = u3a_take(pro);