34
34
#include "zend_hash.h"
35
35
#include "pdo_dbh_arginfo.h"
36
36
#include "zend_observer.h"
37
+ #include "zend_extensions.h"
37
38
38
39
static bool pdo_dbh_attribute_set (pdo_dbh_t * dbh , zend_long attr , zval * value );
39
40
@@ -1204,6 +1205,9 @@ static void cls_method_dtor(zval *el) /* {{{ */ {
1204
1205
if (func -> common .function_name ) {
1205
1206
zend_string_release_ex (func -> common .function_name , 0 );
1206
1207
}
1208
+ if (ZEND_MAP_PTR (func -> common .run_time_cache )) {
1209
+ efree (ZEND_MAP_PTR (func -> common .run_time_cache ));
1210
+ }
1207
1211
efree (func );
1208
1212
}
1209
1213
/* }}} */
@@ -1213,6 +1217,9 @@ static void cls_method_pdtor(zval *el) /* {{{ */ {
1213
1217
if (func -> common .function_name ) {
1214
1218
zend_string_release_ex (func -> common .function_name , 1 );
1215
1219
}
1220
+ if (ZEND_MAP_PTR (func -> common .run_time_cache )) {
1221
+ pefree (ZEND_MAP_PTR (func -> common .run_time_cache ), 1 );
1222
+ }
1216
1223
pefree (func , 1 );
1217
1224
}
1218
1225
/* }}} */
@@ -1240,13 +1247,14 @@ bool pdo_hash_methods(pdo_dbh_object_t *dbh_obj, int kind)
1240
1247
1241
1248
memset (& func , 0 , sizeof (func ));
1242
1249
1250
+ size_t rt_cache_size = zend_internal_run_time_cache_reserved_size ();
1243
1251
while (funcs -> fname ) {
1244
1252
func .type = ZEND_INTERNAL_FUNCTION ;
1245
1253
func .handler = funcs -> handler ;
1246
1254
func .function_name = zend_string_init (funcs -> fname , strlen (funcs -> fname ), dbh -> is_persistent );
1247
1255
func .scope = dbh_obj -> std .ce ;
1248
1256
func .prototype = NULL ;
1249
- ZEND_MAP_PTR (func .run_time_cache ) = NULL ;
1257
+ ZEND_MAP_PTR (func .run_time_cache ) = rt_cache_size ? pemalloc ( rt_cache_size , dbh -> is_persistent ) : NULL ;
1250
1258
func .T = ZEND_OBSERVER_ENABLED ;
1251
1259
if (funcs -> flags ) {
1252
1260
func .fn_flags = funcs -> flags | ZEND_ACC_NEVER_CACHE ;
0 commit comments