-/** Load the remote swag of processes into a dynar
- *
- * @param process MCed process
- * @param target Local dynar (to be filled with copies of `s_smx_process_t`)
- * @param remote_swag Address of the process SWAG in the remote list
- */
-static void MC_process_refresh_simix_process_list(
- mc_process_t process,
- xbt_dynar_t target, xbt_swag_t remote_swag)
-{
- // swag = REMOTE(*simix_global->process_list)
- s_xbt_swag_t swag;
- MC_process_read(process, MC_PROCESS_NO_FLAG, &swag, remote_swag, sizeof(swag),
- MC_PROCESS_INDEX_ANY);
-
- smx_process_t p;
- xbt_dynar_reset(target);
-
- int i = 0;
- for (p = swag.head; p; ++i) {
-
- s_mc_smx_process_info_t info;
- info.address = p;
- MC_process_read(process, MC_PROCESS_NO_FLAG,
- &info.copy, p, sizeof(info.copy), MC_PROCESS_INDEX_ANY);
- xbt_dynar_push(target, &info);
-
- // Lookup next process address:
- p = xbt_swag_getNext(&info.copy, swag.offset);
- }
- assert(i == swag.count);
-}
-
-void MC_process_refresh_simix_processes(mc_process_t process)
-{
- if (process->cache_flags & MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES)
- return;
-
- xbt_mheap_t heap = mmalloc_set_current_heap(mc_heap);
-
- // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global`
-
- // simix_global_p = REMOTE(simix_global);
- smx_global_t simix_global_p;
- MC_process_read_variable(process, "simix_global", &simix_global_p, sizeof(simix_global_p));
-
- // simix_global = REMOTE(*simix_global)
- s_smx_global_t simix_global;
- MC_process_read(process, MC_PROCESS_NO_FLAG, &simix_global, simix_global_p, sizeof(simix_global),
- MC_PROCESS_INDEX_ANY);
-
- MC_process_refresh_simix_process_list(
- process, process->smx_process_infos, simix_global.process_list);
- MC_process_refresh_simix_process_list(
- process, process->smx_old_process_infos, simix_global.process_to_destroy);
-
- process->cache_flags |= MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES;
- mmalloc_set_current_heap(heap);
-}
-