I think the cause of our issues with random failed-to-exec errors is this SIGCHLD handler. When the parent process asks a light process to do a waitpid operation, we now can get EINTR for two reasons. It used to use signals only for implementing timeouts with SIGALRM, but now it appears possible due to the SIGCHLD. This could lead us to report the waitpid as failing---which it looks can have ExecFuture thinking running==false and reading the exit code as -1. Also, now that we have a SIGCHLD handler (are we sure we want to keep this?), using waitpid() without an EINTR loop is probably similarly broken in the parent process. (Also, isn't it basically incorrect to use wait functions without an EINTR loop in general, though?) I didn't add an EINTR loop in do_waitpid in this diff because it's using signals for timeout (it really should be checking a volatile sigatomic_t that gets set by the handler, though) Also, this means using Process::Exec is suspect in general. All uses looked like debugger or tests only (and when hphpc runs hhvm in a subprocess), so I didn't nuke them (yet). I deleted some random network.h dead code that uses it, though.
HipHop VM for PHP
HipHop VM (HHVM) is a new open-source virtual machine designed for executing programs written in PHP. HHVM uses a just-in-time compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. HipHop VM (and before it HPHPc) has realized > 5x increase in throughput for Facebook compared with Zend PHP 5.2.
HipHop is most commonly run as a standalone server, replacing both Apache and modphp.
Installing
You can install a prebuilt package or compile from source.
Contributing
We'd love to have your help in making HipHop better. If you run into problems, please open an issue, or better yet, fork us and send a pull request.
If you want to help but don't know where to start, try fixing some of the Zend tests that don't pass. You can run them with hphp/test/run. When they work, move them to zend/good and send a pull request.
Before changes can be accepted a Contributors Licensing Agreement must be signed and returned.
Licence
HipHop VM is licensed under the PHP and Zend licenses except as otherwise noted.