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); 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 // A destructor associated with each list entry from the persistent list
static void php_grpc_channel_plink_dtor(php_grpc_zend_resource *rsrc static void php_grpc_channel_plink_dtor(php_grpc_zend_resource *rsrc
TSRMLS_DC) { TSRMLS_DC) {
@ -615,12 +622,11 @@ static void php_grpc_target_bound_dtor(php_grpc_zend_resource *rsrc
#ifdef GRPC_PHP_DEBUG #ifdef GRPC_PHP_DEBUG
/** /**
* Clean all channels in the persistent. Test only. * Clean all channels in the persistent
* @return void * @return void
*/ */
PHP_METHOD(Channel, cleanPersistentList) { PHP_METHOD(Channel, cleanPersistentList) {
zend_hash_clean(&grpc_persistent_list); php_grpc_clean_persistent_list(TSRMLS_C);
zend_hash_clean(&grpc_target_upper_bound_map);
} }
char *grpc_connectivity_state_name(grpc_connectivity_state state) { 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 void php_grpc_delete_persistent_list_entry(char *key, php_grpc_int key_len
TSRMLS_DC); TSRMLS_DC);
void php_grpc_clean_persistent_list(TSRMLS_D);
typedef struct _channel_persistent_le { typedef struct _channel_persistent_le {
grpc_channel_wrapper *channel; grpc_channel_wrapper *channel;
} channel_persistent_le_t; } channel_persistent_le_t;

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

Loading…
Cancel
Save