A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
simplify throw_exception
[simgrid.git]
/
src
/
kernel
/
actor
/
ActorImpl.cpp
diff --git
a/src/kernel/actor/ActorImpl.cpp
b/src/kernel/actor/ActorImpl.cpp
index
3a5938b
..
5cea62c
100644
(file)
--- a/
src/kernel/actor/ActorImpl.cpp
+++ b/
src/kernel/actor/ActorImpl.cpp
@@
-198,36
+198,22
@@
void ActorImpl::exit()
/* destroy the blocking synchro if any */
if (waiting_synchro != nullptr) {
/* destroy the blocking synchro if any */
if (waiting_synchro != nullptr) {
+ waiting_synchro->cancel();
+ waiting_synchro->state_ = SIMIX_FAILED;
activity::ExecImplPtr exec = boost::dynamic_pointer_cast<activity::ExecImpl>(waiting_synchro);
activity::CommImplPtr comm = boost::dynamic_pointer_cast<activity::CommImpl>(waiting_synchro);
activity::ExecImplPtr exec = boost::dynamic_pointer_cast<activity::ExecImpl>(waiting_synchro);
activity::CommImplPtr comm = boost::dynamic_pointer_cast<activity::CommImpl>(waiting_synchro);
- activity::SleepImplPtr sleep = boost::dynamic_pointer_cast<activity::SleepImpl>(waiting_synchro);
- activity::RawImplPtr raw = boost::dynamic_pointer_cast<activity::RawImpl>(waiting_synchro);
- activity::IoImplPtr io = boost::dynamic_pointer_cast<activity::IoImpl>(waiting_synchro);
- if (exec != nullptr && exec->surf_action_) {
- exec->cancel();
- exec->surf_action_->unref();
- exec->surf_action_ = nullptr;
+ if (exec != nullptr) {
+ exec->clean_action();
} else if (comm != nullptr) {
comms.remove(waiting_synchro);
} else if (comm != nullptr) {
comms.remove(waiting_synchro);
- comm->cancel();
// Remove first occurrence of &actor->simcall:
auto i = boost::range::find(waiting_synchro->simcalls_, &simcall);
if (i != waiting_synchro->simcalls_.end())
waiting_synchro->simcalls_.remove(&simcall);
// Remove first occurrence of &actor->simcall:
auto i = boost::range::find(waiting_synchro->simcalls_, &simcall);
if (i != waiting_synchro->simcalls_.end())
waiting_synchro->simcalls_.remove(&simcall);
- } else if (sleep != nullptr) {
- if (sleep->surf_action_)
- sleep->surf_action_->cancel();
- sleep->post();
- } else if (raw != nullptr) {
- raw->finish();
- } else if (io != nullptr) {
- io->cancel();
} else {
} else {
- simgrid::kernel::activity::ActivityImplPtr activity = waiting_synchro;
- xbt_die("Activity %s is of unknown type %s", activity->get_cname(),
- simgrid::xbt::demangle(typeid(activity).name()).get());
+ activity::ActivityImplPtr(waiting_synchro)->finish();
}
waiting_synchro = nullptr;
}
waiting_synchro = nullptr;
@@
-413,11
+399,9
@@
activity::ActivityImplPtr ActorImpl::sleep(double duration)
throw_exception(std::make_exception_ptr(simgrid::HostFailureException(
XBT_THROW_POINT, std::string("Host ") + host_->get_cname() + " failed, you cannot sleep there.")));
throw_exception(std::make_exception_ptr(simgrid::HostFailureException(
XBT_THROW_POINT, std::string("Host ") + host_->get_cname() + " failed, you cannot sleep there.")));
- return activity::SleepImplPtr(new activity::SleepImpl())
- ->set_name("sleep")
- ->set_host(host_)
- ->set_duration(duration)
- ->start();
+ activity::SleepImpl* sleep = new activity::SleepImpl();
+ (*sleep).set_name("sleep").set_host(host_).set_duration(duration).start();
+ return activity::SleepImplPtr(sleep);
}
void ActorImpl::throw_exception(std::exception_ptr e)
}
void ActorImpl::throw_exception(std::exception_ptr e)
@@
-429,20
+413,16
@@
void ActorImpl::throw_exception(std::exception_ptr e)
/* cancel the blocking synchro if any */
if (waiting_synchro) {
/* cancel the blocking synchro if any */
if (waiting_synchro) {
-
- activity::ExecImplPtr exec = boost::dynamic_pointer_cast<activity::ExecImpl>(waiting_synchro);
- if (exec != nullptr)
- exec->cancel();
+ waiting_synchro->cancel();
activity::CommImplPtr comm = boost::dynamic_pointer_cast<activity::CommImpl>(waiting_synchro);
activity::CommImplPtr comm = boost::dynamic_pointer_cast<activity::CommImpl>(waiting_synchro);
+ activity::SleepImplPtr sleep = boost::dynamic_pointer_cast<activity::SleepImpl>(waiting_synchro);
+
if (comm != nullptr) {
comms.remove(comm);
if (comm != nullptr) {
comms.remove(comm);
- comm->cancel();
}
}
- activity::SleepImplPtr sleep = boost::dynamic_pointer_cast<activity::SleepImpl>(waiting_synchro);
if (sleep != nullptr) {
if (sleep != nullptr) {
- SIMIX_process_sleep_destroy(sleep);
if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), this) ==
end(simix_global->actors_to_run) &&
this != SIMIX_process_self()) {
if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), this) ==
end(simix_global->actors_to_run) &&
this != SIMIX_process_self()) {
@@
-450,17
+430,8
@@
void ActorImpl::throw_exception(std::exception_ptr e)
simix_global->actors_to_run.push_back(this);
}
}
simix_global->actors_to_run.push_back(this);
}
}
-
- activity::RawImplPtr raw = boost::dynamic_pointer_cast<activity::RawImpl>(waiting_synchro);
- if (raw != nullptr) {
- raw->finish();
- }
-
- activity::IoImplPtr io = boost::dynamic_pointer_cast<activity::IoImpl>(waiting_synchro);
- if (io != nullptr) {
- io->cancel();
- }
}
}
+
waiting_synchro = nullptr;
}
waiting_synchro = nullptr;
}
@@
-593,7
+564,7
@@
void SIMIX_process_throw(smx_actor_t actor, xbt_errcat_t cat, int value, const c
simgrid::kernel::activity::SleepImplPtr sleep =
boost::dynamic_pointer_cast<simgrid::kernel::activity::SleepImpl>(actor->waiting_synchro);
if (sleep != nullptr) {
simgrid::kernel::activity::SleepImplPtr sleep =
boost::dynamic_pointer_cast<simgrid::kernel::activity::SleepImpl>(actor->waiting_synchro);
if (sleep != nullptr) {
-
SIMIX_process_sleep_destroy(sleep
);
+
sleep->clean_action(
);
if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), actor) ==
end(simix_global->actors_to_run) &&
actor != SIMIX_process_self()) {
if (std::find(begin(simix_global->actors_to_run), end(simix_global->actors_to_run), actor) ==
end(simix_global->actors_to_run) &&
actor != SIMIX_process_self()) {
@@
-694,16
+665,6
@@
void simcall_HANDLER_process_sleep(smx_simcall_t simcall, double duration)
simcall->issuer->waiting_synchro = sync;
}
simcall->issuer->waiting_synchro = sync;
}
-void SIMIX_process_sleep_destroy(simgrid::kernel::activity::SleepImplPtr sleep)
-{
- XBT_DEBUG("Destroy sleep synchro %p", sleep.get());
-
- if (sleep->surf_action_) {
- sleep->surf_action_->unref();
- sleep->surf_action_ = nullptr;
- }
-}
-
/**
* @brief Calling this function makes the process to yield.
*
/**
* @brief Calling this function makes the process to yield.
*