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

Re: FPATH/autoload still strange in -dev-21



On Apr 6, 10:18am, Sven Wischnowsky wrote:
} Subject: Re: FPATH/autoload still strange in -dev-21
}
} Bart Schaefer wrote:
} 
} > 	if (autoload -U 2> /dev/null); then
} > 
} > First zsh forks the subshell, and then the subshell forks again
} 
} Bart sent me the strace output and there he also repeated the line
} above, but slightly different:
} 
}     if (autoload -U 2>& /dev/null); then
} 
} So, Bart, if that is the form you have in .zshenv, this explains the
} processes.

The second is indeed the form I had at the time I created that strace.
Sorry about the confusion; the first time I typed it by hand and the
second I cut'n'pasted ... (and it's yet a third way in 10316, because
I cut'n'pasted _that_ while in the midst of editing it different ways
to try to get zsh to tell me why it was failing ... gaah, sorry).

} `2>& /dev/null' makes the shell look at the word after the
} redirection. This isn't a number, so the whole thing is treated like
} `&>' on file descriptor 2.

I noticed that just after I sent the strace to you and deleted the `&',
but I didn't resend the strace because I forgot about ...

} This makes it treat it as a multio and the
} funny chap with the many close()s is the zsh-tee process.

... and because removing the `&' didn't change the visible failure.  Nor
does removing the entire redirection, for that matter.

} This is ugly. `&>' on file descriptor 2 makes no sense at all and if
} even Bart is confused, I think we should do something about it.

I wasn't confused ... it was an editing error.  I originally tried
`(autoload -U 2>&-)' which produced an error about an invalid file
descriptor, and then I inadvertently changed only the `-'.  However:

} Make `2>& <non-number>' be silently treated like `2> <non-number>'?

I'd vote for that anyway.

} > Now, the odd thing is, the subshell calls _exit(0), so you'd think that zsh
} > would take the "then" branch of the "if" -- but it doesn't, it takes the
} > "else" branch.  So there must be two race conditions (?) here -- one in the
} > subshell where it loses track of its child, and another where the topmost
} > zsh mishandles the exit of that subshell.
} 
} I'm not sure any more if this is really a race condition. I suspect a
} memory corruption of some kind, triggered by importing $FPATH from the 
} environment (which would also explain why I can't reproduce, with
} different allocation behaviours and all that).

And the memory corruption ... steps on the exit status of the subshell as
returned to the parent, somehow?  I can't see how that could be ... the
subshell is calling _exit(0) but the parent still takes the false branch.
Hrm.
 
} And the initial setup of fpath also depends on the site-function dirs
} that are automatically added and so on...

I do NOT compile with --enable-function-subdirs, if that matters.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com



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