CRYPTO_w_unlock(CRYPTO_LOCK_ERR_HASH);
CRYPTO_r_unlock(CRYPTO_LOCK_ERR_HASH);
const char *ERR_reason_error_string(unsigned long e)	{	ERR_STRING_DATA d,*p=NULL;	unsigned long l,r;	l=ERR_GET_LIB(e);	r=ERR_GET_REASON(e);	CRYPTO_w_lock(CRYPTO_LOCK_ERR_HASH);	if (error_hash != NULL)		{		d.error=ERR_PACK(l,0,r);		p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);		if (p == NULL)			{			d.error=ERR_PACK(0,0,r);			p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);			}		}	CRYPTO_w_unlock(CRYPTO_LOCK_ERR_HASH);	return((p == NULL)?NULL:p->string);	}