From ca3b7320f3e846fdd5786abcde3e1e23f507c170 Mon Sep 17 00:00:00 2001 From: Simon Berger Date: Mon, 17 Jun 2024 09:25:37 -0700 Subject: [PATCH] Fix segmentation faults with enabled keep_descriptor_pool_after_request (#16993) (cherry picked from commit e844510ee30e25017e94f9f43751abab159208c8) --- php/ext/google/protobuf/protobuf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/php/ext/google/protobuf/protobuf.c b/php/ext/google/protobuf/protobuf.c index 1f36ed09529e..1f6889ff7432 100644 --- a/php/ext/google/protobuf/protobuf.c +++ b/php/ext/google/protobuf/protobuf.c @@ -143,11 +143,11 @@ static PHP_GINIT_FUNCTION(protobuf) { protobuf_globals->global_symtab = NULL; } static PHP_RINIT_FUNCTION(protobuf) { // Create the global generated pool. // Reuse the symtab (if any) left to us by the last request. - upb_DefPool* symtab = PROTOBUF_G(global_symtab); - if (!symtab) { - PROTOBUF_G(global_symtab) = symtab = upb_DefPool_New(); - zend_hash_init(&PROTOBUF_G(name_msg_cache), 64, NULL, NULL, 0); - zend_hash_init(&PROTOBUF_G(name_enum_cache), 64, NULL, NULL, 0); + if (!PROTOBUF_G(global_symtab)) { + zend_bool persistent = PROTOBUF_G(keep_descriptor_pool_after_request); + PROTOBUF_G(global_symtab) = upb_DefPool_New(); + zend_hash_init(&PROTOBUF_G(name_msg_cache), 64, NULL, NULL, persistent); + zend_hash_init(&PROTOBUF_G(name_enum_cache), 64, NULL, NULL, persistent); } zend_hash_init(&PROTOBUF_G(object_cache), 64, NULL, NULL, 0); @@ -308,7 +308,7 @@ zend_module_entry protobuf_module_entry = { protobuf_functions, // function list PHP_MINIT(protobuf), // process startup PHP_MSHUTDOWN(protobuf), // process shutdown - PHP_RINIT(protobuf), // request shutdown + PHP_RINIT(protobuf), // request startup PHP_RSHUTDOWN(protobuf), // request shutdown NULL, // extension info PHP_PROTOBUF_VERSION, // extension version