unsigned long simix_process_maxpid = 0;
-/** Increase the refcount for this process */
-smx_actor_t SIMIX_process_ref(smx_actor_t process)
-{
- if (process != nullptr)
- intrusive_ptr_add_ref(process);
- return process;
-}
-
-/** Decrease the refcount for this process */
-void SIMIX_process_unref(smx_actor_t process)
-{
- if (process != nullptr)
- intrusive_ptr_release(process);
-}
-
/**
* \brief Returns the current agent.
*
}
}
-/** Whether this process is daemonized */
-bool ActorImpl::isDaemon()
+void ActorImpl::resume()
{
- return daemon;
+ XBT_IN("process = %p", this);
+
+ if (context->iwannadie) {
+ XBT_VERB("Ignoring request to suspend a process that is currently dying.");
+ return;
+ }
+
+ if (not suspended)
+ return;
+ suspended = 0;
+
+ /* resume the synchronization that was blocking the resumed process. */
+ if (waiting_synchro)
+ waiting_synchro->resume();
+
+ XBT_OUT();
}
void create_maestro(std::function<void()> code)
#if HAVE_SMPI
if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) {
if (parent_process->pid != 0) {
- SIMIX_segment_index_set(process, parent_process->segment_index);
+ process->segment_index = parent_process->segment_index;
} else {
- SIMIX_segment_index_set(process, process->pid - 1);
+ process->segment_index = process->pid - 1;
}
}
#endif
#if HAVE_SMPI
if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) {
if (parent_process->pid != 0) {
- SIMIX_segment_index_set(process, parent_process->segment_index);
+ process->segment_index = parent_process->segment_index;
} else {
- SIMIX_segment_index_set(process, process->pid - 1);
+ process->segment_index = process->pid - 1;
}
}
#endif
boost::dynamic_pointer_cast<simgrid::kernel::activity::IoImpl>(process->waiting_synchro);
if (exec != nullptr) {
-
+ /* Nothing to do */
} else if (comm != nullptr) {
process->comms.remove(process->waiting_synchro);
comm->cancel();
} else if (io != nullptr) {
SIMIX_io_destroy(process->waiting_synchro);
+ } else {
+ xbt_die("Unknown type of activity");
}
/*
SMX_EXCEPTION(process, cat, value, msg);
if (process->suspended)
- SIMIX_process_resume(process);
+ process->resume();
/* cancel the blocking synchro if any */
if (process->waiting_synchro) {
SIMIX_process_empty_trash();
}
-void simcall_HANDLER_process_set_host(smx_simcall_t simcall, smx_actor_t process, sg_host_t dest)
-{
- process->new_host = dest;
-}
-
void SIMIX_process_change_host(smx_actor_t process, sg_host_t dest)
{
xbt_assert((process != nullptr), "Invalid parameters");
xbt_swag_insert(process, dest->extension<simgrid::simix::Host>()->process_list);
}
-
void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t process)
{
smx_activity_t sync_suspend = SIMIX_process_suspend(process, simcall->issuer);
}
}
-void SIMIX_process_resume(smx_actor_t process)
-{
- XBT_IN("process = %p", process);
-
- if (process->context->iwannadie) {
- XBT_VERB("Ignoring request to suspend a process that is currently dying.");
- return;
- }
-
- if (not process->suspended)
- return;
- process->suspended = 0;
-
- /* resume the synchronization that was blocking the resumed process. */
- if (process->waiting_synchro)
- process->waiting_synchro->resume();
-
- XBT_OUT();
-}
-
int SIMIX_process_get_maxpid() {
return simix_process_maxpid;
}
return simix_global->process_list.size();
}
-int SIMIX_process_get_PID(smx_actor_t self)
-{
- if (self == nullptr)
- return 0;
- else
- return self->pid;
-}
-
void* SIMIX_process_self_get_data()
{
smx_actor_t self = SIMIX_process_self();
return nullptr;
}
-int SIMIX_process_is_suspended(smx_actor_t process)
-{
- return process->suspended;
-}
-
-xbt_dict_t SIMIX_process_get_properties(smx_actor_t process)
-{
- return process->properties;
-}
-
void simcall_HANDLER_process_join(smx_simcall_t simcall, smx_actor_t process, double timeout)
{
if (process->finished) {
xbt_abort();
}
-smx_context_t SIMIX_process_get_context(smx_actor_t p) {
- return p->context;
-}
-
-void SIMIX_process_set_context(smx_actor_t p,smx_context_t c) {
- p->context = c;
-}
-
/**
* \brief Returns the list of processes to run.
*/
}
void SIMIX_process_on_exit_runall(smx_actor_t process) {
- s_smx_process_exit_fun_t exit_fun;
smx_process_exit_status_t exit_status = (process->context->iwannadie) ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS;
while (not process->on_exit.empty()) {
- exit_fun = process->on_exit.back();
+ s_smx_process_exit_fun_t exit_fun = process->on_exit.back();
(exit_fun.fun)((void*)exit_status, exit_fun.arg);
process->on_exit.pop_back();
}
return actor;
}
-void SIMIX_segment_index_set(smx_actor_t proc, int index){
- proc->segment_index = index;
-}
-
/**
* \ingroup simix_process_management
* \brief Creates and runs a new SIMIX process.