ZF_NAMESPACE_GLOBAL_BEGIN

static void _ZFP_ZFLog_ZFCoreLogExtFunc(ZF_IN const zfchar *callerFile,
                                        ZF_IN const zfchar *callerFunction,
                                        ZF_IN zfindex callerLine)
{
    if(zfLogStackTraceAvailable())
    {
        zfCoreLogTrim(ZFStringZ2A(zfLogStackTrace(zfnull, 2).cString()));
    }
}
Example #2
0
void ZFMutex::mutexLock(void)
{
    if(this->_ZFP_ZFObjectLockIsAvailable())
    {
        this->_ZFP_ZFObjectLock();
    }
    else if(!this->noWarningIfImplementationNotAvailable)
    {
        zfCoreLogTrim(zfTextA("[ZFMutex] try mutexLock a object while no implementation for lock"));
    }
}
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()));
        }
    }
}