Re: zend_execute_ex problem

From: Date: Wed, 31 Jul 2013 13:05:35 +0000
Subject: Re: zend_execute_ex problem
References: 1 2  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
>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)

« previous php.internals (#68347) next »