EX(function_state).function is supposed to be a pointer to the op_array that you passed to execute(). Any chance the op_array is somehow deleted by mistake? Did you try looking at EX(function_state) and EX(function_state).function to understand why it's dying?
At 03:02 PM 5/19/2002, Wez Furlong wrote: >I'm in the process of adding IActiveScriptError support to my active >script >sapi. The way the sapi works is by compiling "scriptlets" into >zend_op_arrays >and then, at a later time, uses zend_execute to execute them. > >This works perfectly when the script has no errors :-) > >If I deliberately add a scriplet that tries to call an undefined >function, >the code is compiled correctly, but when it is executed, the engine >triggers >a "call to undefined function error" (that's fine), but then I end up >with a >segfault: > >zend_execute.c: >do_fcall_common: >{ > zval **original_return_value; > int return_value_used = RETURN_VALUE_USED(EX(opline)); > > zend_ptr_stack_n_push(&EG(argument_stack), 2, > (void *) EX(opline)->extended_value, NULL); > > EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = > &EX(Ts)[EX(opline)->result.u.var].var.ptr; > > // Segfault on this next line > if (EX(function_state).function->type==ZEND_INTERNAL_FUNCTION) { > >I suspect this probably has something to do with the way that the >execution >environment is setup. The code I'm using is this: > > zval *retval_ptr = NULL; > zend_op_array *active_op_array = EG(active_op_array); > zend_function_state *function_state_ptr = EG(function_state_ptr); > zval **return_value_ptr_ptr = >EG(return_value_ptr_ptr); > zend_op **opline_ptr = EG(opline_ptr); > > EG(return_value_ptr_ptr) = &retval_ptr; > EG(active_op_array) = frag->opcodes; > EG(no_extensions) = 1; > > zend_execute(frag->opcodes TSRMLS_CC); > > EG(no_extensions) = 0; > EG(opline_ptr) = opline_ptr; > EG(active_op_array) = active_op_array; > EG(function_state_ptr) = function_state_ptr; > EG(return_value_ptr_ptr) = return_value_ptr_ptr; > > if (retval_ptr) { > zval_ptr_dtor(&retval_ptr); > } > >That works fine if there are no errors or calls to undefined functions; >it's just when there are errors that I run into problems. >Could this error also be attributed to the way that the op_array was >compiled? I'm using compile_string to do that part. > >Is there anything in particular that I should do to make this work? >The sapi framework is initialized in a similar way to the ISAPI sapi, >in case that helps. > >--Wez. -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php