void c_ConditionWaitHandle::t_succeed(const Variant& result) { if (isFinished()) { failAlreadyFinished(); } assert(getState() == STATE_BLOCKED); auto parentChain = getParentChain(); setState(STATE_SUCCEEDED); cellDup(*result.asCell(), m_resultOrException); parentChain.unblock(); }
void HHVM_METHOD(ConditionWaitHandle, succeed, const Variant& result) { auto obj = wait_handle<c_ConditionWaitHandle>(this_); if (obj->isFinished()) { failAlreadyFinished(); } assert(obj->getState() == c_ConditionWaitHandle::STATE_BLOCKED); auto parentChain = obj->getParentChain(); obj->setState(c_ConditionWaitHandle::STATE_SUCCEEDED); cellDup(*result.asCell(), obj->m_resultOrException); parentChain.unblock(); }
void HHVM_METHOD(ConditionWaitHandle, fail, const Object& exception) { if (!exception->instanceof(SystemLib::s_ThrowableClass)) { SystemLib::throwInvalidArgumentExceptionObject( "Expected exception to be an instance of Throwable"); } auto obj = wait_handle<c_ConditionWaitHandle>(this_); if (obj->isFinished()) { failAlreadyFinished(); } assert(obj->getState() == c_ConditionWaitHandle::STATE_BLOCKED); auto parentChain = obj->getParentChain(); obj->setState(c_ConditionWaitHandle::STATE_FAILED); cellDup(make_tv<KindOfObject>(exception.get()), obj->m_resultOrException); parentChain.unblock(); }
void c_ConditionWaitHandle::t_fail(const Variant& exception) { auto const cell = exception.asCell(); if (UNLIKELY( cell->m_type != KindOfObject || !cell->m_data.pobj->instanceof(SystemLib::s_ExceptionClass) )) { SystemLib::throwInvalidArgumentExceptionObject( "Expected exception to be an instance of Exception"); } if (isFinished()) { failAlreadyFinished(); } assert(getState() == STATE_BLOCKED); auto parentChain = getParentChain(); setState(STATE_FAILED); cellDup(make_tv<KindOfObject>(cell->m_data.pobj), m_resultOrException); parentChain.unblock(); }