summaryrefslogtreecommitdiff
path: root/zend/extensionimpl.cpp
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-12 11:17:49 +0200
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-12 11:17:49 +0200
commit858e25bf8e7c69b856b40372e9a8ca6a23bb1c3c (patch)
treee71667954d8b5bc1e0ef01b57a22b10d9a150ae8 /zend/extensionimpl.cpp
parentd6aff895972f87044bcc3378e9681b50c038591a (diff)
fixed wrong memory deallocation when php.ini entries were unregistered (issue #64)
Diffstat (limited to 'zend/extensionimpl.cpp')
-rw-r--r--zend/extensionimpl.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/zend/extensionimpl.cpp b/zend/extensionimpl.cpp
index 5e03736..04308c8 100644
--- a/zend/extensionimpl.cpp
+++ b/zend/extensionimpl.cpp
@@ -115,16 +115,16 @@ int ExtensionImpl::processStartup(int type, int module_number TSRMLS_DC)
auto *extension = find(module_number TSRMLS_CC);
// array contains ini settings
- zend_ini_entry *ini_entries = new zend_ini_entry[extension->_data->iniVariables()+1];
+ _ini = new zend_ini_entry[extension->_data->iniVariables()+1];
// the entry that we're filling
int i=0;
// Fill the php.ini entries
- extension->_data->iniVariables([ini_entries, &i, module_number](Ini &ini) {
+ extension->_data->iniVariables([this, &i, module_number](Ini &ini) {
// initialize the function
- zend_ini_entry *entry = &ini_entries[i];
+ zend_ini_entry *entry = &_ini[i];
// fill the property
ini.fill(entry, module_number);
@@ -134,10 +134,10 @@ int ExtensionImpl::processStartup(int type, int module_number TSRMLS_DC)
});
// last entry should be set to all zero's
- memset(&ini_entries[i], 0, sizeof(zend_ini_entry));
+ memset(&_ini[i], 0, sizeof(zend_ini_entry));
// register ini entries in Zend core
- REGISTER_INI_ENTRIES();
+ zend_register_ini_entries(_ini, module_number TSRMLS_CC);
// initialize the extension
extension->initialize(TSRMLS_C);
@@ -161,11 +161,8 @@ int ExtensionImpl::processShutdown(int type, int module_number TSRMLS_DC)
// get the extension
auto *extension = find(module_number TSRMLS_CC);
-
- UNREGISTER_INI_ENTRIES();
- // free memory from array ini entries
- static zend_ini_entry *ini_entries;
- delete [] ini_entries;
+ // unregister the ini entries
+ zend_unregister_ini_entries(module_number TSRMLS_CC);
// is the callback registered?
if (extension->_onShutdown) extension->_onShutdown();
@@ -262,6 +259,9 @@ ExtensionImpl::ExtensionImpl(Extension *data, const char *name, const char *vers
*/
ExtensionImpl::~ExtensionImpl()
{
+ // deallocate the php.ini entries
+ if (_ini) delete[] _ini;
+
// deallocate functions
if (_entry.functions) delete[] _entry.functions;
}