On Mar 18 21:46, Corinna Vinschen wrote:
> On Mar 18 13:10, Jeremy Drake via Cygwin-developers wrote:
> > On Tue, 18 Mar 2025, Corinna Vinschen wrote:
> > 
> > > Fodder for future Cygwin development:
> > >
> > > If you have other ideas what could be helpful for Cygwin, don't be shy
> > > to add it to this thread.  Ideally with the intention to look into
> > > implementing it by yourself, but at least a certain willingness to look
> > > into the source code and discuss potential ways to implement it given
> > > the current framework.
> > 
> > I periodically think about posix_spawn and the potential to fast-path
> > simple cases to one of the spawn functions instead of a fork/exec.  This
> > should give a relatively good effort to performance improvement ratio.
> 
> One of the biggies here is the way descriptor passing works in Cygwin.
> 
> We're coming from a historical API model which didn't know the
> STARTUPINFOEX datatype, nor the UpdateProcThreadAttribute function
> and PROC_THREAD_ATTRIBUTE_HANDLE_LIST.  Thus, Cygwin is handling
> handles free-form.  Some handles required for Cygwin internally are 
> simply inherited, FD_CLOEXEC is implemented by closing the handles
> in the forked child, etc.
> 
> For posix_spawn without forking, this complicates matters.  For
> instance, we don't want having to close FD_CLOEXEC handles in the
> spawned child because that's a security problem.
> 
> An excellent preparation for a faster posix_spawn which spawns w/o
> forking would be:
> 
> - Full handle bookkeeping.  Every single handle opened by Cygwin (not
>   only those in an fhandler) is added to a list with the information
>   if it has to be inherited by forked and execed/spawned children.
>   And maybe more generic info, but that's not the point here.
> 
> - After having all handles booked in this central list, change
>   frok::parent and child_info_spawn::worker to collect all handles
>   to be inherited in a PROC_THREAD_ATTRIBUTE_HANDLE_LIST.
> 
> Incidentally this would not only simplify posix_spawn.  It would
> catch the new FD_CLOFORK almost automatically.

...and even simplify FD_CLOEXEC if I didn't miss something.  This
might even speed up fork() slightly.

> 
> 
> Corinna

Reply via email to