CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, r, &r->ex_data);
void DH_free(DH *r)	{	const DH_METHOD *meth;	int i;	if(r == NULL) return;	i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);#ifdef REF_PRINT	REF_PRINT("DH",r);#endif	if (i > 0) return;#ifdef REF_CHECK	if (i < 0)		{		fprintf(stderr,"DH_free, bad reference count\n");		abort();	}#endif	meth = ENGINE_get_DH(r->engine);	if(meth->finish) meth->finish(r);	ENGINE_finish(r->engine);	CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);	if (r->p != NULL) BN_clear_free(r->p);	if (r->g != NULL) BN_clear_free(r->g);	if (r->q != NULL) BN_clear_free(r->q);	if (r->j != NULL) BN_clear_free(r->j);	if (r->seed) OPENSSL_free(r->seed);	if (r->counter != NULL) BN_clear_free(r->counter);	if (r->pub_key != NULL) BN_clear_free(r->pub_key);	if (r->priv_key != NULL) BN_clear_free(r->priv_key);	OPENSSL_free(r);	}