Re: restore user opcode handler in PHP

From: Date: Sun, 12 Feb 2012 12:41:44 +0000
Subject: Re: restore user opcode handler in PHP
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-57809@lists.php.net to get a copy of this message
Hi: could you file a feature req on bugs.php.net? I think it's okey to add a zend_restore_user_handler . like: ZEND_API int zend_restore_user_opcode_handler(zend_uchar opcode) { zend_user_opcodes[opcode] = opcode; zend_user_opcode_handlers[opcode] = NULL; return SUCCESS; } but it still need dmitry to review :) thanks On Sun, Feb 12, 2012 at 8:09 PM, yoram bar haim <yoram.b@zend.com> 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 > -- Laruence  Xinchen Hui http://www.laruence.com/

« previous php.internals (#57809) next »