void c_AsyncGeneratorWaitHandle::fail(ObjectData* exception) { AsioSession* session = AsioSession::Get(); if (UNLIKELY(session->hasOnResumableFailCallback())) { session->onResumableFail(this, exception); } auto parentChain = getParentChain(); setState(STATE_FAILED); cellCopy(make_tv<KindOfObject>(exception), m_resultOrException); parentChain.unblock(); decRefObj(m_generator); decRefObj(this); }
/** * Mark the wait handle as failed due to PHP exception. * * - consumes reference of the given Exception object */ void c_AsyncFunctionWaitHandle::fail(ObjectData* exception) { assert(isRunning()); assert(exception); assert(exception->instanceof(SystemLib::s_ExceptionClass)); AsioSession* session = AsioSession::Get(); if (UNLIKELY(session->hasOnResumableFailCallback())) { session->onResumableFail(this, exception); } auto const parentChain = getFirstParent(); setState(STATE_FAILED); cellCopy(make_tv<KindOfObject>(exception), m_resultOrException); UnblockChain(parentChain); decRefObj(this); }