OnXXXXX handlers not called in ZTS environment

php.internals

Uwe Schindler

23 years ago
When changing a ini entry with zend_alter_ini_entry during runtime the Callback routines OnUpdateXXXX are never called. This problem only exists in multithreaded environments. I think that the handler field in the entry is not copied when creating the copy of the ini entries after creating a new thread ressource: #ifdef ZTS ZEND_API int zend_copy_ini_directives(TSRMLS_D) { zend_ini_entry ini_entry; EG(ini_directives) = (HashTable *) malloc(sizeof(HashTable)); if (zend_hash_init_ex(EG(ini_directives), registered_zend_ini_directives->nNumOfElements, NULL, NULL, 1, 0)==FAILURE) { return FAILURE; } zend_hash_copy(EG(ini_directives), registered_zend_ini_directives, NULL, &ini_entry, sizeof(zend_ini_entry)); zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC); return SUCCESS; } #endif I am not very familar with the Zend engine so I do not know how to implement this, but the following command does not ever call the OnUpdate handler: zend_alter_ini_entry(....., PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME) Uwe

(Marcus Börger)

23 years ago
At 01:18 31.05.2003, Uwe Schindler wrote:
>When changing a ini entry with zend_alter_ini_entry during runtime the >Callback routines OnUpdateXXXX are never called. This problem only exists >in multithreaded environments. >I think that the handler field in the entry is not copied when creating >the copy of the ini entries after creating a new thread ressource:
The zend_hash_copy() function copies the all the information so the problem should be elsewhere. [...]
>I am not very familar with the Zend engine so I do not know how to >implement this, but the following command does not ever call the OnUpdate >handler: >zend_alter_ini_entry(....., PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME)
And here we go: PHP_INI_SYSTEM values cannot be set at runtime, that's their sense. regards marcus

Uwe Schindler

23 years ago
Its the same in the other way without PHP_INI_SYSTEM. They get changed. Only the handler is not called. At 12:32 31.05.2003 +0200, you wrote:
>At 01:18 31.05.2003, Uwe Schindler wrote: >>When changing a ini entry with zend_alter_ini_entry during runtime the >>Callback routines OnUpdateXXXX are never called. This problem only exists >>in multithreaded environments. >>I think that the handler field in the entry is not copied when creating >>the copy of the ini entries after creating a new thread ressource: > >The zend_hash_copy() function copies the all the information so the >problem should be elsewhere. >[...] >>I am not very familar with the Zend engine so I do not know how to >>implement this, but the following command does not ever call the OnUpdate >>handler: >>zend_alter_ini_entry(....., PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME) > > >And here we go: PHP_INI_SYSTEM values cannot be set at runtime, that's >their sense. > >regards >marcus
----- Uwe Schindler Addr 1: Bamberger Str. 24a, D-96049 Bamberg Addr 2: Drausnickstr. 153, D-91052 Erlangen http://www.thetaphi.de - http:///www.schindlers-software.de eMails: uwe@thetaphi.de (private); info@schindlers-software.de (company) Tel./Fax: +49 700 PCLATEIN (+49 700 72528346) Schindlers Software - Home of Schindlers PC-LATEIN 3.10 DIE Software zum Lateinlernen!