crypto: Use reference count to manage cert_store
Setting reference count at the time of setting cert_store instead of trying to manage it by modifying internal states in destructor. PR-URL: https://github.com/nodejs/node/pull/9409 Reviewed-By: Fedor Indutny <fedor@indutny.com> Reviewed-By: Shigeki Ohtsu <ohtsu@ohtsu.org>
This commit is contained in:
parent
5025d7bfb0
commit
9259bf3306
@ -773,6 +773,8 @@ void SecureContext::AddRootCerts(const FunctionCallbackInfo<Value>& args) {
|
||||
}
|
||||
|
||||
sc->ca_store_ = root_cert_store;
|
||||
// Increment reference count so global store is not deleted along with CTX.
|
||||
CRYPTO_add(&root_cert_store->references, 1, CRYPTO_LOCK_X509_STORE);
|
||||
SSL_CTX_set_cert_store(sc->ctx_, sc->ca_store_);
|
||||
}
|
||||
|
||||
|
@ -142,13 +142,6 @@ class SecureContext : public BaseObject {
|
||||
void FreeCTXMem() {
|
||||
if (ctx_) {
|
||||
env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize);
|
||||
if (ctx_->cert_store == root_cert_store) {
|
||||
// SSL_CTX_free() will attempt to free the cert_store as well.
|
||||
// Since we want our root_cert_store to stay around forever
|
||||
// we just clear the field. Hopefully OpenSSL will not modify this
|
||||
// struct in future versions.
|
||||
ctx_->cert_store = nullptr;
|
||||
}
|
||||
SSL_CTX_free(ctx_);
|
||||
if (cert_ != nullptr)
|
||||
X509_free(cert_);
|
||||
|
Loading…
x
Reference in New Issue
Block a user