#include "src/simix/ActorImpl.hpp"
#include "src/simix/popping_private.hpp"
#include "src/simix/smx_private.hpp"
+#include "src/surf/cpu_interface.hpp"
#include "src/surf/surf_interface.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
+namespace simgrid {
+namespace kernel {
+namespace activity {
-void simgrid::kernel::activity::SleepImpl::suspend()
+SleepImpl::~SleepImpl()
{
- surf_sleep->suspend();
+ if (surf_action_)
+ surf_action_->unref();
+ XBT_DEBUG("Destroy activity %p", this);
}
-void simgrid::kernel::activity::SleepImpl::resume()
+SleepImpl* SleepImpl::start(double duration)
{
- surf_sleep->resume();
+ surf_action_ = host_->pimpl_cpu->sleep(duration);
+ surf_action_->set_data(this);
+ XBT_DEBUG("Create sleep synchronization %p", this);
+ return this;
}
-void simgrid::kernel::activity::SleepImpl::post()
+void SleepImpl::post()
{
while (not simcalls_.empty()) {
smx_simcall_t simcall = simcalls_.front();
simcalls_.pop_front();
e_smx_state_t result;
- if (host && host->is_off()) {
+ if (host_ && host_->is_off()) {
/* If the host running the synchro failed, notice it. This way, the asking
* actor can be killed if it runs on that host itself */
result = SIMIX_SRC_HOST_FAILURE;
std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed")));
}
- switch (surf_sleep->get_state()) {
- case simgrid::kernel::resource::Action::State::FAILED:
+ switch (surf_action_->get_state()) {
+ case resource::Action::State::FAILED:
simcall->issuer->context_->iwannadie = true;
result = SIMIX_FAILED;
break;
- case simgrid::kernel::resource::Action::State::FINISHED:
+ case resource::Action::State::FINISHED:
result = SIMIX_DONE;
break;
SIMIX_process_sleep_destroy(this);
}
+
+} // namespace activity
+} // namespace kernel
+} // namespace simgrid