CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); MemCheck_on();
MemCheck_on();
void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line,	int before_p)	{	MEM *m,*mm;	APP_INFO tmp,*amim;	switch(before_p & 127)		{	case 0:		break;	case 1:		if (addr == NULL)			break;		if (is_MemCheck_on())			{			MemCheck_off();			if ((m=(MEM *)Malloc(sizeof(MEM))) == NULL)				{				Free(addr);				MemCheck_on();				return;				}			CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);			if (mh == NULL)				{				if ((mh=lh_new(mem_hash,mem_cmp)) == NULL)					{					Free(addr);					Free(m);					addr=NULL;					goto err;					}				}			m->addr=addr;			m->file=file;			m->line=line;			m->num=num;			if (options & V_CRYPTO_MDEBUG_THREAD)				m->thread=CRYPTO_thread_id();			else				m->thread=0;			if (order == break_order_num)				{				/* BREAK HERE */				m->order=order;				}			m->order=order++;#ifdef LEVITTE_DEBUG			fprintf(stderr, "LEVITTE_DEBUG: [%5d] %c 0x%p (%d)\n",				m->order,				(before_p & 128) ? '*' : '+',				m->addr, m->num);#endif			if (options & V_CRYPTO_MDEBUG_TIME)				m->time=time(NULL);			else				m->time=0;			tmp.thread=CRYPTO_thread_id();			m->app_info=NULL;			if (amih != NULL				&& (amim=(APP_INFO *)lh_retrieve(amih,(char *)&tmp)) != NULL)				{				m->app_info = amim;				amim->references++;				}			if ((mm=(MEM *)lh_insert(mh,(char *)m)) != NULL)				{				/* Not good, but don't sweat it */				if (mm->app_info != NULL)					{					mm->app_info->references--;					}				Free(mm);				}		err:			CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);			MemCheck_on();			}		break;		}	return;	}