Arquivos
hhvm/hphp/runtime/ext/asio/static_result_wait_handle.cpp
T
jan a9926b46d2 Move enter/exit context responsibility from PHP to join(), try #2
Move the responsibility of entering/exiting contexts from PHP to the
implementation of $wait_handle->join().

This eliminates possibility of weird situations, like contexts without
any running wait handle. This guarantees that asio_get_current() returns
null only if called completely out of asio framework and simplifies some
logic, such as getCurrentWaitHandleDepth().
2013-03-09 10:29:30 -08:00

55 linhas
2.1 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010- Facebook, Inc. (http://www.facebook.com) |
| Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#include <runtime/ext/ext_asio.h>
#include <system/lib/systemlib.h>
namespace HPHP {
///////////////////////////////////////////////////////////////////////////////
namespace {
StaticString s_staticResult("<static-result>");
}
c_StaticResultWaitHandle::c_StaticResultWaitHandle(VM::Class* cb)
: c_StaticWaitHandle(cb) {
setState(STATE_SUCCEEDED);
}
c_StaticResultWaitHandle::~c_StaticResultWaitHandle() {
tvRefcountedDecRefCell(&m_resultOrException);
}
void c_StaticResultWaitHandle::t___construct() {
Object e(SystemLib::AllocInvalidOperationExceptionObject(
"Use StaticResultWaitHandle::create() instead of constructor"));
throw e;
}
Object c_StaticResultWaitHandle::ti_create(const char* cls, CVarRef result) {
p_StaticResultWaitHandle wh = NEWOBJ(c_StaticResultWaitHandle)();
tvReadCell(result.asTypedValue(), &wh->m_resultOrException);
return wh;
}
String c_StaticResultWaitHandle::getName() {
return s_staticResult;
}
///////////////////////////////////////////////////////////////////////////////
}