Date: Sun, 11 Oct 1998 02:06:17 -0700 (PDT) From: Matthew Dillon <dillon@backplane.com> To: Peter Wemm <peter@netplex.com.au> Cc: Bruce Evans <bde@FreeBSD.ORG>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/lib/libc/gen popen.c Message-ID: <199810110906.CAA02043@apollo.backplane.com> References: <199810110309.LAA18511@spinner.netplex.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
:Bruce Evans wrote: :> bde 1998/10/10 12:30:45 PDT :> :> Modified files: :> lib/libc/gen popen.c :> Log: :> vfork -> fork. The child calls execl() which calls malloc(), so :> vfork() can't be used. We could use alloca() in execl() so that :> it can be called between vfork() and execve(), but a "portable" :... : :Why not fix it properly by not using execl()? Wait a second!!!!!! vfork() was specifically designed for situations where you call the exec*() functions. That's the whole point of using vfork() rather then fork()!!!!! If execl() is not compatible with vfork(), then execl() is seriously broken. And I do mean seriously. I can't begin to count the number of times I use vfork()/execl() in programs. The problem ought to be easily solvable by having the exec*() functions cache the returned argv in a static and 'free' them on the following call before allocating a new copy, so the parent process does not leak memory. Frankly, I'd prefer a solution that doesn't touch malloc at all... if it were me I'd just take &arg and be done with it, but alloca() is probably better then that. Still not fun, but better. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810110906.CAA02043>