cvs commit: src/usr.sbin/sysinstall main.c

Brooks Davis brooks at freebsd.org
Wed May 2 16:27:32 UTC 2007


On Wed, May 02, 2007 at 10:45:00AM -0400, John Baldwin wrote:
> On Tuesday 01 May 2007 06:39:41 pm M. Warner Losh wrote:
> > Andrey,
> > 
> > Thanks for taking the time to track down all the problems that the
> > initial commit caused.  Thank you also for showing the maturity to
> > gracefully back out the changes until they can be discussed in more
> > depth.  I know that there's been a lot of emotion expressed over these
> > changes, and I complement you on keeping your cool during the
> > discussions.
> > 
> > I'd like to suggest that people interested in this continue the
> > discussion in arch@ which is a more appropriate...  This post seems to
> > be the most relevant of the ones from src-commits.
> 
> If it wasn't obvious from my post, I think that the POSIX putenv(3) is
> probably the most beneficial going forward.  It also doesn't impact the
> setenv(3) memory fixes, which should also probably go in once someone
> has reviewed them.

From your arguments I think this change makes sense.  It's probably
worth documenting the obviously problems of using this API such as races
if used in threaded programs.

-- Brooks

> > Warner
> > 
> > In message: <20070501193146.GD10323 at nagual.pp.ru>
> >             Andrey Chernov <ache at freebsd.org> writes:
> > : On Tue, May 01, 2007 at 12:10:11PM -0400, John Baldwin wrote:
> > : > Now, that said, apparently some folks on this list CAN'T READ.
> > : > 
> > : > Linux has the new putenv() algorithm already, so if any software breaks with 
> > : > this, it is _ALREADY_ broken on Linux.  Please consider that before ripping 
> > : > ache@ a new one here.  As much as BSD wants to feel really important, in 
> > : > truth, most of the software in ports probably runs more often on Linux than 
> > : > on BSD, so I think the chances of non-trivial real-world breakage are fairly 
> > : > small.
> > : 
> > : And I already tell exactly so about Linux and ports already portable in 
> > : the threads. Perhaps they will hear you better, but the changes in 
> > : question are already backed out and I can't work on them under such 
> > : pressure. In case anyone brave will be found, feel free to restore, and 
> > : then I'll promise my help dealing with all bugs they may cause.
> > : 
> > : > So with all that said, it seems we have four groups of usage with respect to 
> > : > putenv(3):
> > : > 
> > : > - give it a stack allocated or otherwise non-persistent buffer (note that 
> > : > string constants are persistent, even if they are read-only) as the first 
> > : > argument.  This violates POSIX I guess, and would break on at least Linux and 
> > : > Solaris (judging by Open Solaris's putenv() implementation).
> > : 
> > : Agreed.
> > : 
> > : > - pass in a persistent buffer (constant, allocated memory, etc.) and change 
> > : > the contents later expecting that changing the buffer won't change the 
> > : > environment.  This breaks Linux and Solaris and POSIX as well.
> > : 
> > : Agreed.
> > : 
> > : > - pass in a persistent buffer and don't change it afterwards (at least not 
> > : > until after a later call to putenv or setenv for the same variable).  This 
> > : > works for both impls and is probably the vast majority of usage.
> > : 
> > : Agreed. Most programs don't use the modify-env-on-the-fly feature, but it 
> > : is at the current moment, just because several putenv() implementations 
> > : was hanging around when no one standartized. When POSIX explicitly 
> > : standartize modify-env-on-the-fly feature, more programs will tend to try 
> > : it at time.
> > : 
> > : > - pass in a persistent buffer and change the contents expecting that it will 
> > : > change the value returned from getenv().  This doesn't work on BSD, but does 
> > : > on Linux + Solaris + POSIX + FreeBSD 7.
> > : 
> > : Agreed (but not for FreeBSD7 now).
> > : 
> > : > So we have four groups: 1, 2, 3 (likely the vast majority), and 4.  (4) is 
> > : > fixed by this commit, and works on Linux, Solaris, and POSIX.  (1 + 2) are 
> > : > broken by this commit, but they also don't work on Linux, Solaris, or POSIX.
> > : > So the question seems to be, which set is larger, programs that depend on (1 + 
> > : > 2), or programs that depend on (4)?  Also, which set is going to get larger 
> > : > as time moves on given Linux's implementation?  If you assume (as I do), that 
> > : > most programs fall into (3) anyway, then it really isn't all that important 
> > : > anyway.
> > : 
> > : Set 3 is larger now, but popularity of set 4 perhaps will be increased in 
> > : the future because it is standard. Set 1 is small and will be decreased.
> > : 
> > : -- 
> > : http://ache.pp.ru/
> > : 
> > _______________________________________________
> > freebsd-arch at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> > To unsubscribe, send any mail to "freebsd-arch-unsubscribe at freebsd.org"
> > 
> 
> 
> 
> -- 
> John Baldwin
> _______________________________________________
> freebsd-arch at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "freebsd-arch-unsubscribe at freebsd.org"
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20070502/f39a13de/attachment-0001.pgp


More information about the freebsd-arch mailing list