X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7f0845ec805dc9b93cab3adb223eadd20aa1f169..46448320f12d59d0a5efc015ec51ec6ebba525c6:/src/mc/mc_smx.h diff --git a/src/mc/mc_smx.h b/src/mc/mc_smx.h index fa7a5651f7..827634d150 100644 --- a/src/mc/mc_smx.h +++ b/src/mc/mc_smx.h @@ -4,15 +4,17 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#ifndef MC_SMX_H -#define MC_SMX_H +#ifndef SIMGRID_MC_SMX_H +#define SIMGRID_MC_SMX_H #include #include #include -#include "mc_process.h" +#include "smpi/private.h" + +#include "mc/Process.hpp" #include "mc_protocol.h" /** @file @@ -31,7 +33,7 @@ * * The process lists are currently refreshed each time MCed code is executed. * We don't try to give a persistent MCer address for a given MCed process. - * For this reason, a MCer mc_process_t is currently not reusable after + * For this reason, a MCer simgrid::mc::Process* is currently not reusable after * MCed code. */ @@ -43,13 +45,15 @@ struct s_mc_smx_process_info { /** (Flat) Copy of the process data structure */ struct s_smx_process copy; /** Hostname (owned by `mc_modelchecker->hostnames`) */ - char* hostname; + const char* hostname; char* name; }; -xbt_dynar_t MC_smx_process_info_list_new(void); +typedef struct s_mc_smx_process_info s_mc_smx_process_info_t, *mc_smx_process_info_t; + +XBT_PRIVATE xbt_dynar_t MC_smx_process_info_list_new(void); -void MC_process_smx_refresh(mc_process_t process); +XBT_PRIVATE void MC_process_smx_refresh(simgrid::mc::Process* process); /** Get the issuer of a simcall (`req->issuer`) * @@ -60,38 +64,41 @@ void MC_process_smx_refresh(mc_process_t process); * @param process the MCed process * @param req the simcall (copied in the local process) */ -smx_process_t MC_smx_simcall_get_issuer(smx_simcall_t req); +XBT_PRIVATE smx_process_t MC_smx_simcall_get_issuer(smx_simcall_t req); -const char* MC_smx_process_get_name(smx_process_t p); -const char* MC_smx_process_get_host_name(smx_process_t p); +XBT_PRIVATE const char* MC_smx_process_get_name(smx_process_t p); +XBT_PRIVATE const char* MC_smx_process_get_host_name(smx_process_t p); #define MC_EACH_SIMIX_PROCESS(process, code) \ - if (MC_process_is_self(&mc_model_checker->process)) { \ + if (mc_mode == MC_MODE_CLIENT) { \ xbt_swag_foreach(process, simix_global->process_list) { \ code; \ } \ } else { \ - MC_process_smx_refresh(&mc_model_checker->process); \ + MC_process_smx_refresh(&mc_model_checker->process()); \ unsigned int _smx_process_index; \ mc_smx_process_info_t _smx_process_info; \ - xbt_dynar_foreach_ptr(mc_model_checker->process.smx_process_infos, _smx_process_index, _smx_process_info) { \ + xbt_dynar_foreach_ptr(mc_model_checker->process().smx_process_infos, _smx_process_index, _smx_process_info) { \ smx_process_t process = &_smx_process_info->copy; \ code; \ } \ } /** Execute a given simcall */ -void MC_simcall_handle(smx_simcall_t req, int value); +XBT_PRIVATE void MC_simcall_handle(smx_simcall_t req, int value); +XBT_PRIVATE int MC_smpi_process_count(void); /* ***** Resolve (local/MCer structure from remote/MCed addresses) ***** */ /** Get a local copy of the process from the process remote address */ -smx_process_t MC_smx_resolve_process(smx_process_t process_remote_address); +XBT_PRIVATE smx_process_t MC_smx_resolve_process(smx_process_t process_remote_address); /** Get the process info structure from the process remote address */ -mc_smx_process_info_t MC_smx_resolve_process_info(smx_process_t process_remote_address); +XBT_PRIVATE mc_smx_process_info_t MC_smx_resolve_process_info(smx_process_t process_remote_address); + +XBT_PRIVATE unsigned long MC_smx_get_maxpid(void); SG_END_DECL()