static zfbool _ZFP_ZFLeakTestVerboseObserverContain(ZF_IN ZFObject *obj) { ZF_GLOBAL_INITIALIZER_CLASS(ZFLeakTestVerboseObserverDataHolder) *holder = ZF_GLOBAL_INITIALIZER_INSTANCE(ZFLeakTestVerboseObserverDataHolder); return (obj != zfnull && (holder->clsList.find(obj->classData()) != zfindexMax || holder->objList.find(obj) != zfindexMax) ); }
void _ZFP_zfautoReleaseAction(ZF_IN ZFObject *obj, ZF_IN const zfcharA *callerFile, ZF_IN const zfcharA *callerFunction, ZF_IN zfindex callerLine, ZF_IN zfbool enableLeakTest) { if(ZFPROTOCOL_IS_AVAILABLE(ZFThread)) { ZFThread *threadCur = ZFThread::currentThread(); if(threadCur == zfnull) { zfCoreCriticalMessageTrim(zfTextA("%s current thread is null, make sure the thread is started or registered by ZFThread"), ZF_CALLER_INFO_DETAIL(callerFile, callerFunction, callerLine)); return ; } threadCur->_ZFP_ZFThreadAutoReleasePoolAdd(obj, callerFile, callerFunction, callerLine, enableLeakTest); } else { ZFAutoReleasePool::instance()->poolAdd(obj, callerFile, callerFunction, callerLine, enableLeakTest); if(ZFPROTOCOL_IS_AVAILABLE(ZFThreadTaskRequest)) { ZF_GLOBAL_INITIALIZER_CLASS(zfautoRelease_poolDrainDataHolder) *d = ZF_GLOBAL_INITIALIZER_INSTANCE(zfautoRelease_poolDrainDataHolder); if(!d->drainTaskRequested) { d->drainTaskRequested = zftrue; ZFThreadTaskRequest(d->drainTask); } } else { zfCoreLogTrim(zfTextA("%s zfautoRelease called while no auto drain logic support, object %s would not be released normally"), ZF_CALLER_INFO_DETAIL(callerFile, callerFunction, callerLine), zfsCoreZ2A(obj->objectInfoOfInstance().cString())); } } }