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())); } } }
// ============================================================ // ZFObjectMutexImpl static zfbool _ZFP_ZFObjectMutexImplCheckCallback_ZFMutex(void) { return ZFPROTOCOL_IS_AVAILABLE(ZFObjectMutex); }