On Tue, Mar 17, 2015 at 10:39 PM, Stanislav Malyshev <smalys...@gmail.com> wrote:
> Hi! > > Dmitry, the perf boost of this is awesome, but is it completely safe? > > Won't a signal potentially overwrite a register variable here? Like on a > > timeout, for example? > > The docs say (http://gcc.gnu.org/onlinedocs/gcc/Global-Reg-Vars.html): > > It is not safe to access the global register variables from signal > handlers, or from more than one thread of control, because the system > library routines may temporarily use the register for other things > (unless you recompile them specially for the task at hand). > I don't see any problems to reuse the same registers outside executor. > > Also: > > It is not safe for one function that uses a global register variable to > call another such function foo by way of a third function lose that is > compiled without knowledge of this variable (i.e. in a different source > file in which the variable isn't declared). This is because lose might > save the register and put some other value there. For example, you can't > expect a global register variable to be available in the > comparison-function that you pass to qsort, since qsort might have put > something else in that register. (If you are prepared to recompile qsort > with the same global register variable, you can solve this problem.) > preserved registers are saved and restored as usually. > > So, I wonder how that would work with loadable modules and external > libraries that could use PHP callbacks. > It works and I didn't see any problems yet :) Thanks. Dmitry. > > -- > Stas Malyshev > smalys...@gmail.com >