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

Re: BIG bug!



david.sainty@xxxxxxxxxxxxxx wrote:
> This bug has a very weird effect that could cause a lot of strife! The
> effect appears to be that at the end of .'ing a script (including
> login scripts), zsh is likely to jump back into the middle of the
> script and start again! This causes infinite loops, or weird errors
> with no apparent cause (I could not see where the unmatched " was,
> because my login script was being jumped into halfway through a line
> with a " near the start!)
> 
> And yeah.... That did take a lot of hunting! But I have so much work
> to do, I was just looking for a reason to procrastinate! :-)

Thanks for the work on this... You'll be gratified/annoyed to know it
only took me a few minutes to track down with the information you
gave.  These are classic symptoms for exit() being called instead of
_exit(), so the culprit had to be the exit for builtins with an exec.
The problem was the new code which allows an exec at the end of a
subshell turns on CFLAG_EXEC, and the forked variable isn't enough to
tell you if you're in a subshell, so I added the explicit test for
`subsh'.

(Translation:  You're likely to get this when doing something like
backtick expansion where the last command was a builtin --- that was
the case in Dave's script.)

Anyway, this disposes of that spurious `return' call on OSF/1 3.0.
If anyone still experiences similar problems, let me know a.s.a.p.
Looking at the exit in execlist(), it may well be that needs the same
treatment.  (The symptoms would then show up when ERREXIT was set in a
subshell which terminated on an error.)

*** Src/exec.c.exit	Mon Jun  5 10:16:00 1995
--- Src/exec.c	Mon Jun  5 10:16:14 1995
***************
*** 1450,1456 ****
  
  	    if (!forked) {
  		if (cmd->flags & CFLAG_EXEC)
! 		    exit(lastval);
  		if (savelist) {
  		    /* Restore variables, freeing the list but not data. */
  		    Savepm savenode;
--- 1450,1459 ----
  
  	    if (!forked) {
  		if (cmd->flags & CFLAG_EXEC)
! 		    if (subsh)
! 			_exit(lastval);
! 		    else
! 			exit(lastval);
  		if (savelist) {
  		    /* Restore variables, freeing the list but not data. */
  		    Savepm savenode;

-- 
Peter Stephenson <P.Stephenson@xxxxxxxxxxxxx>  Tel: +44 1792 205678 extn. 4461
WWW:  http://python.swan.ac.uk/~pypeters/      Fax: +44 1792 295324
Department of Physics, University of Wales, Swansea,
Singleton Park, Swansea, SA2 8PP, U.K.



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