diff --git a/src/cmd/ksh93/sh/name.c b/src/cmd/ksh93/sh/name.c index c3cd0e66cfb2..55387a66bea9 100644 --- a/src/cmd/ksh93/sh/name.c +++ b/src/cmd/ksh93/sh/name.c @@ -2466,8 +2466,9 @@ void _nv_unset(register Namval_t *np,int flags) } if(slp->slptr) { - stakdelete(slp->slptr); + Stak_t *sp = slp->slptr; slp->slptr = NIL(Stak_t*); + stakdelete(sp); } free((void*)np->nvalue.ip); np->nvalue.ip = 0; diff --git a/src/cmd/ksh93/sh/parse.c b/src/cmd/ksh93/sh/parse.c index 070bd2df1e9f..5e219de45845 100644 --- a/src/cmd/ksh93/sh/parse.c +++ b/src/cmd/ksh93/sh/parse.c @@ -963,8 +963,9 @@ static Shnode_t *funct(Lex_t *lexp) if(slp && slp->slptr) { sh.st.staklist = slp->slnext; - stakdelete(slp->slptr); + Stak_t *slptr_save = slp->slptr; slp->slptr = NIL(Stak_t*); + stakdelete(slptr_save); } siglongjmp(*sh.jmplist,jmpval); } diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c index 5f240ce3449f..879adb77a74d 100644 --- a/src/cmd/ksh93/sh/xec.c +++ b/src/cmd/ksh93/sh/xec.c @@ -1411,8 +1411,9 @@ int sh_exec(register const Shnode_t *t, int flags) sh_funstaks(slp->slchild,-1); if(slp->slptr) { - stakdelete(slp->slptr); + Stak_t *sp = slp->slptr; slp->slptr = NIL(Stak_t*); + stakdelete(sp); } if(jmpval > SH_JMPFUN || (io && jmpval > SH_JMPIO)) siglongjmp(*sh.jmplist,jmpval); @@ -2462,8 +2463,9 @@ int sh_exec(register const Shnode_t *t, int flags) sh_funstaks(slp->slchild,-1); if(slp->slptr) { - stakdelete(slp->slptr); + Stak_t *sp = slp->slptr; slp->slptr = NIL(Stak_t*); + stakdelete(sp); } if(rp->sdict) {