Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zsh 5.0.6 hanged in freejob from TRAPCHLD

On Oct 1,  4:40pm, Peter Stephenson wrote:
} Subject: Re: zsh 5.0.6 hanged in freejob from TRAPCHLD
} On Wed, 01 Oct 2014 17:25:33 +0200
} Oliver Kiddle <okiddle@xxxxxxxxxxx> wrote:
} > 
} > Eww. Wouldn't it perhaps be easier and better in the long run to replace
} > this whole save/restore/globals concept with non-global structs and make
} > all the lexer functions take a pointer to the relevant instance of the
} > struct.
} You'll soon find the paths you need to pass the structures through
} proliferate somewhat hair-raisingly.  That may lead to useful
} simplifications, though, so this isn't an argument against doing it.

It's not even quite that simple, some of the fields require their own
memory management.  Moving it onto the call stack and passing it around
that way would only change the lexsave/lexrestore calls into something
that allocates/cleans up a local lexstack object.  (Hey, why don't we
rewrite the whole shell in C++ instead?)

It'd be a large step in the right direction to have ONE global -- a
single (struct lexstack *) -- and have lexsave/lexrestore swap that
pointer rather than copy each of the fields.  However, doesn't remove
the need for the signal queuing (see "fields require their own
memory management").

Futher, that still means finding everything that references those
globals -- some of them are used outside the lexer to examine the
current lexer state -- and replacing all those mentions with deref
through the new global pointer.  Yeah, the compiler will sort that out
if we just remove the declarations of the globals.  Busywork.

Then you get to do that for all the other things that use batches of
globals in this way (see execsave/execrestrore, trap scopes, etc.) 

Messages sorted by: Reverse Date, Date, Thread, Author