Ryan Bloom wrote:

On Friday 23 November 2001 10:06 am, Stas Bekman wrote:

Ryan Bloom wrote:

On Friday 23 November 2001 12:25 am, Stas Bekman wrote:

I'm porting Apache::SubProcess Perl/XS module to mod_perl 2.0 and after
checking the existing APR's API I have found that the functionality
existing in ap_spawn_child from 1.3.x has gone. Now you can only run a
program/script from the spawned process.

Any reason for removing this support? I'm probably not aware of some
hidden portablity issues, but by comparing ap_spawn_child from 1.3.x
with apr_proc_create() from APR isn't the change is as simple as
replacing execve() call with func() call after copying apr_proc_create()
into some different function (of course the args should be different)?

Windows doesn't support creating a new process without running a new
program.  I have been looking at creating fork() on Windows, but it is
incredibly non-trivial.

so how is this solved in 1.3.x? Or is it not used for portable modules?
I see (grep) that at least mod_rewrite and http_log use it in core.


Take a look at the implementation of spawn_child_core on Windows though. It isn't actually creating a new process. Near as I can tell, it is doing all of the work in a thread from the original process. I can't find where the thread is created, but we also don't have any function to create a new process.

Can we do the same workaround for apr? it was very slick to be able to pass a function to run to a spawned child and not to worry about IO pipes setup, exec_cleanup, etc. Now people will have to code their own fork() with a bunch of other things, and make things not very portable :( APR already includes a lot of OS specific code surrounding fork() code, it'd be really a pity not to be able to use this knowledge.


I was also thinking to ask this: Is it possible to have some wrapper that will exec a process (and a func on my list) either in a spawned process or in a thread. e.g. if we running in the threaded env, the thread will be used to run the process, if we are in pre-fork run in the sub-process? The point is to hide all the complexity from the user code. You realize that if user writes his code to spawn a thread for doing some stuff it won't work with pre-fork and vice versa. What's apr take on this? I've read through all the .h files but couldn't find anything like this.


_____________________________________________________________________ Stas Bekman JAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide http://perl.apache.org/guide mailto:[EMAIL PROTECTED] http://ticketmaster.com http://apacheweek.com http://singlesheaven.com http://perl.apache.org http://perlmonth.com/




Reply via email to