Re: zend_execute_ex problem
>Hi Julien,
Hi and thank you for taking the time to help.
> Don't over write EG(execute_data), but use your own pointer when it is
needed. I think this will fix your problem.
The problem here is that I have came to the conclusion (wrong
conclusion ?) that I need to update the EG(current_execute_data) "as
if" the former called function had been processed, to actually skip
the function that was called in PHP.
Maybe some code will be more explicit...
<?php
myFunction(); //the function is expected to be called (and will)
$hook = function () {throw new Exception()};
aop_add_before('myFunction()', $hook); //now we ask the extension to
call hook() before myFunction()
myFunction();//Now myFunction should never be called, as the hook is
raising an exception
Extension-wise, the code is located here
(https://github.com/AOP-PHP/AOP/blob/php5-5/aop.c#L390), where I test
if the hook raised an exception or not.
If it did not, I'm calling the function
(https://github.com/AOP-PHP/AOP/blob/php5-5/aop.c#L392
<https://github.com/AOP-PHP/AOP/blob/php5-5/aop.c#L391>)
and it ends
up updating EG(current_execute_data) with
EG(current_execute_data)->prev_execute_data.
Now, when the hook is raising an exception, I'd like to just skip the
function call. If I just "return"
(https://github.com/AOP-PHP/AOP/blob/php5-5/aop.c#L397
<https://github.com/AOP-PHP/AOP/blob/php5-5/aop.c#L396>)
it ends up in
an infinite loop. reason why I tried EG (current_execute_data) =
EG(current_execute_data)->prev_execute_data;
But this solution ends up in memory headakes...
2013/7/31 Yasuo Ohgaki <[email protected]>
> Hi Julien,
>
> On Wed, Jul 31, 2013 at 6:24 PM, Julien SALLEYRON <
> [email protected]> wrote:
>
>> If I EG(execute_data) = EG(execute_data)->prev_execute_data, there is no
>> loop anymore, but I have freeing error
>>
>
> Don't over write EG(execute_data), but use your own pointer when it is
> needed.
> I think this will fix your problem.
>
> Regards,
>
> --
> Yasuo Ohgaki
> [email protected]
>
Thread (4 messages)