More work with memory leaks

pull/19778/head
Matthew Stevenson 6 years ago
parent 333cd930c3
commit 86f52e312a
  1. 4
      include/grpcpp/security/tls_credentials_options.h
  2. 10
      src/cpp/common/tls_credentials_options.cc

@ -84,6 +84,10 @@ class TlsCredentialReloadArg {
private:
grpc_tls_credential_reload_arg c_arg_;
/** These boolean variables record whether the corresponding field of the C
* arg was dynamically allocated. This occurs e.g. if one of the above setter functions was
* used, or if the C arg's callback function does so. **/
bool key_materials_config_alloc_ = false;
bool error_details_alloc_ = false;
};

@ -53,7 +53,10 @@ TlsCredentialReloadArg::TlsCredentialReloadArg(
c_arg_ = arg;
}
TlsCredentialReloadArg::~TlsCredentialReloadArg() { }
TlsCredentialReloadArg::~TlsCredentialReloadArg() {
if (key_materials_config_alloc_) { gpr_free(c_arg_.key_materials_config); }
if (error_details_alloc_) { gpr_free(const_cast<char*>(c_arg_.error_details)); }
}
void* TlsCredentialReloadArg::cb_user_data() const {
return c_arg_.cb_user_data;
@ -83,8 +86,12 @@ void TlsCredentialReloadArg::set_cb_user_data(void* cb_user_data) {
void TlsCredentialReloadArg::set_key_materials_config(
const std::shared_ptr<TlsKeyMaterialsConfig>& key_materials_config) {
if (key_materials_config_alloc_) {
gpr_free(c_arg_.key_materials_config);
}
c_arg_.key_materials_config =
ConvertToCKeyMaterialsConfig(key_materials_config);
key_materials_config_alloc_ = true;
}
void TlsCredentialReloadArg::set_status(
@ -99,7 +106,6 @@ void TlsCredentialReloadArg::set_error_details(
}
c_arg_.error_details = gpr_strdup(error_details.c_str());
error_details_alloc_ = true;
c_arg_.error_details = gpr_strdup(error_details.c_str());
}
void TlsCredentialReloadArg::OnCredentialReloadDoneCallback() {

Loading…
Cancel
Save