Hi Dmitry.
the patch does work, in sense of actually restoring the handlers state when 
you call zend_set_user_opcode_handler() with original handler.
the patch does not solve the basic problem of no re-initialization of static 
arrayes on mac.

As for feeling the array with zero's, if we do that, we also need to fill it 
with original opcodes, something like :

static zend_base_user_opcodes = {0,1,2,3,4,....};

and then in php_module_startup :

memset (zend_user_opcode_handlers,0,sizeof(zend_user_opcode_handlers);
memcpy 
(zend_user_opcodes,zend_base_user_opcodes,sizeof(zend_base_user_opcodes);

So basically, every modifiably variable should be initialized as startup and 
not only by static initializer.

On Monday, February 13, 2012 08:31:21 AM Dmitry Stogov wrote:
> Hi Yoram,
> 
> Can we just fill this arrays with zeros on php startup?
> 
> Thanks. Dmitry.
> 
> On 02/12/2012 04:09 PM, yoram bar haim wrote:
> > I first saw this problem while addapting extension to PHP 5.4 but the
> > code is the same in 5.3 :
> > when you call zend_set_user_opcode_handler() it set's a pointer (handler)
> > in zend_user_opcode_handlers and a uint opcode value in
> > zend_user_opcodes to ZEND_USER_OPCODE .
> > 
> > you can call zend_set_user_opcode_handler with the original handler to
> > restore it, but if the original state did not include ZEND_USER_OPCODE
> > you have no way to restore it.
> > 
> > Why restoring ?
> > On mac, static variables are not re-initialized on dlclose()+dlopen().
> > that means that apache reload does not re-create
> > zend_user_opcode_handlers and zend_user_opcodes.
> > if your extension sets user_opcode_handler and is not reloaded in apache
> > reload (because you commented it in php.ini, for example), your handlers
> > array will actually point to non-exist handler.
> > if you will call zend_set_user_opcode_handler() with the original handler
> > at MSHUTDOWN, it will restore the handler but zend_user_opcodes[<opcode]
> > will still be ZEND_USER_OPCODE so you will end up calling a NULL
> > handler.
> > 
> > we should eather allow zend_set_user_opcode_handler to also set the value
> > in zend_user_opcodes[<opcode>] or we should build those arrayes from
> > scratch at php_module_init.
> > 
> > currently an extension tha calls zend_set_user_opcode_handler() will make
> > PHP crash on mac after disabling the extension and apache reload.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to