do no re-create persisted channels in forked child process

pull/22774/head
Hannah Shi 5 years ago
parent 841416456a
commit 8e3fb8b844
  1. 12
      src/php/ext/grpc/channel.c
  2. 2
      src/php/ext/grpc/channel.h
  3. 5
      src/php/ext/grpc/php_grpc.c

@ -586,6 +586,13 @@ void php_grpc_delete_persistent_list_entry(char *key, php_grpc_int key_len
gpr_mu_unlock(&global_persistent_list_mu);
}
// Clean all channels in the persistent list
// Called at post fork
void php_grpc_clean_persistent_list(TSRMLS_D) {
zend_hash_clean(&grpc_persistent_list);
zend_hash_clean(&grpc_target_upper_bound_map);
}
// A destructor associated with each list entry from the persistent list
static void php_grpc_channel_plink_dtor(php_grpc_zend_resource *rsrc
TSRMLS_DC) {
@ -615,12 +622,11 @@ static void php_grpc_target_bound_dtor(php_grpc_zend_resource *rsrc
#ifdef GRPC_PHP_DEBUG
/**
* Clean all channels in the persistent. Test only.
* Clean all channels in the persistent
* @return void
*/
PHP_METHOD(Channel, cleanPersistentList) {
zend_hash_clean(&grpc_persistent_list);
zend_hash_clean(&grpc_target_upper_bound_map);
php_grpc_clean_persistent_list(TSRMLS_C);
}
char *grpc_connectivity_state_name(grpc_connectivity_state state) {

@ -60,6 +60,8 @@ void generate_sha1_str(char *sha1str, char *str, php_grpc_int len);
void php_grpc_delete_persistent_list_entry(char *key, php_grpc_int key_len
TSRMLS_DC);
void php_grpc_clean_persistent_list(TSRMLS_D);
typedef struct _channel_persistent_le {
grpc_channel_wrapper *channel;
} channel_persistent_le_t;

@ -206,9 +206,8 @@ void postfork_child() {
grpc_init();
grpc_php_init_completion_queue(TSRMLS_C);
// re-create grpc_channel and point wrapped to it
// unlock wrapped grpc channel mutex
restart_channels();
// clean all channels in the persistent list
php_grpc_clean_persistent_list(TSRMLS_C);
}
void postfork_parent() {

Loading…
Cancel
Save