- while (xbt_dynar_length(vm->processes) > 0) {
- process = xbt_dynar_get_as(vm->processes,0,m_process_t);
- MSG_process_kill(process);
+ while (!xbt_dynar_is_empty(vm->processes)) {
+ process = xbt_dynar_get_as(vm->processes,0,msg_process_t);
+ MSG_process_kill(process);
+ }
+
+ #ifdef HAVE_TRACING
+ TRACE_msg_vm_kill(vm);
+ #endif
+
+}
+
+/**
+ * \ingroup msg_VMs
+ * \brief Reboot the VM, restarting all the processes in it.
+ */
+void MSG_vm_reboot(msg_vm_t vm)
+{
+ xbt_dynar_t process_list = xbt_dynar_new(sizeof(msg_process_t), NULL);
+ msg_process_t process;
+ unsigned int cpt;
+
+ xbt_dynar_foreach(vm->processes, cpt, process) {
+ xbt_dynar_push_as(process_list, msg_process_t, process);
+ }
+
+ xbt_dynar_foreach(process_list, cpt, process) {
+ msg_process_t new_process = MSG_process_restart(process);
+ MSG_vm_bind(vm, new_process);