Ok, thanks Igor.

So it seems the only remaining option (apart from providing a C library) it to 
use Assembly. Assembly is not my territory at all but here's how I think it 
could work:

        …
        emitCall:  [:gen | | fork dup2 execv |
                fork := NativeBoost forCurrentPlatform getGlobalSymbolPointer: 
'fork'.
                dup2 := NativeBoost forCurrentPlatform getGlobalSymbolPointer: 
'dup2'.
                execv := NativeBoost forCurrentPlatform getGlobalSymbolPointer
                gen asm mov: fork asUImm32 to: gen asm EAX.
                gen asm call: gen asm EAX.
                "somehow get the fork return value and test for 0.
                only execute the following lines if pid = 0"
                gen asm mov: dup2 asUImm32 to: gen asm EAX.
                gen asm call: gen asm EAX.
                gen asm mov: execv asUImm32 to: gen asm EAX.
                gen call: gen asm EAX.
                ]

As you can see, I have absolutely no clue what I'm doing :) (just a good 
copycat). I figure that everything from fork() to exec() needs to be in the 
same Assembly sequence to ensure that the child process doesn't try to execute 
VM code (multiple #emitCall:'s probably wouldn't work).

I think that if you could help me fill in the code for where I simply used a 
comment, I could come up with the rest (writing function specs etc.). I'l try 
at least.

Cheers,
Max


On 23.11.2012, at 17:00, Igor Stasenko <[email protected]> wrote:

> so here's the answer:
> - no you cannot use FFI for fork/exec..
> because there's too much involved.
> 
> Ideally VM should have support for it, because i think even OSProcess
> lacking important bits, like:
> - closing all file descriptors (and in unix fd is not just files, but
> for sockets as well)
> - cleaning/preparing environment before doing exec
> - god knows what else.
> 
> now if we take into account that different parts (sockets/files) in VM
> responsible for them,
> and need coordination to do a safe cleanup after fork.. i don't think
> it will be possible to do that using FFI.
> just too much management.
> 
> 
> -- 
> Best regards,
> Igor Stasenko.
> 


Reply via email to