xbt_fifo_free(process->comms);
+ xbt_dynar_free(&process->on_exit);
+
free(process->name);
free(process);
}
}
return res;
}
+void SIMIX_process_on_exit_runall(smx_process_t process) {
+ int cpt;
+ if (!process->on_exit) {
+ return;
+ }
+
+ smx_process_exit_fun_t exit_fun;
+
+ for (cpt = xbt_dynar_length(process->on_exit) - 1; cpt >= 0; cpt--) {
+ exit_fun = xbt_dynar_get_ptr(process->on_exit, cpt);
+ (exit_fun->fun)(exit_fun->arg);
+ }
+}
+void SIMIX_process_on_exit(int_f_pvoid_t fun, void *data) {
+ smx_process_t process = SIMIX_process_self();
+ xbt_assert(process, "current process not found: are you in maestro context ?");
+
+ if (!process->on_exit) {
+ process->on_exit = xbt_dynar_new(sizeof(s_smx_process_exit_fun_t), NULL);
+ }
+
+ s_smx_process_exit_fun_t exit_fun = {fun, data};
+
+ xbt_dynar_push_as(process->on_exit,s_smx_process_exit_fun_t,exit_fun);
+}