A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
deal with portability issues induced by ptrace
[simgrid.git]
/
src
/
simix
/
smx_global.c
diff --git
a/src/simix/smx_global.c
b/src/simix/smx_global.c
index
3491894
..
e1bf5ae
100644
(file)
--- a/
src/simix/smx_global.c
+++ b/
src/simix/smx_global.c
@@
-1,10
+1,15
@@
-/* Copyright (c) 2007-201
4
. The SimGrid Team.
+/* Copyright (c) 2007-201
5
. The SimGrid Team.
* All rights reserved. */
/* 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. */
#include <stdlib.h>
* All rights reserved. */
/* 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. */
#include <stdlib.h>
+#include "src/portable.h"
+#ifdef HAVE_SYS_PTRACE_H
+# include <sys/types.h>
+# include <sys/ptrace.h>
+#endif
#include "smx_private.h"
#include "xbt/heap.h"
#include "smx_private.h"
#include "xbt/heap.h"
@@
-13,18
+18,24
@@
#include "xbt/str.h"
#include "xbt/ex.h" /* ex_backtrace_display */
#include "mc/mc.h"
#include "xbt/str.h"
#include "xbt/ex.h" /* ex_backtrace_display */
#include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "
src/
mc/mc_replay.h"
#include "simgrid/sg_config.h"
#ifdef HAVE_MC
#include "simgrid/sg_config.h"
#ifdef HAVE_MC
-#include "mc/mc_private.h"
-#include "mc/mc_protocol.h"
-#include "mc/mc_client.h"
+#include "
src/
mc/mc_private.h"
+#include "
src/
mc/mc_protocol.h"
+#include "
src/
mc/mc_client.h"
#endif
#endif
-#include "mc/mc_record.h"
+
+#ifdef HAVE_MC
+#include <stdlib.h>
+#include "src/mc/mc_protocol.h"
+#endif
+
+#include "src/mc/mc_record.h"
#ifdef HAVE_SMPI
#ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "s
rc/s
mpi/private.h"
#endif
XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
#endif
XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
@@
-81,14
+92,6
@@
static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
}
#endif
}
}
#endif
}
-#ifdef HAVE_MC
- if (MC_is_active()) {
- if (mc_stack) {
- MC_dump_stack_safety(mc_stack);
- }
- MC_print_statistics(mc_stats);
- }
-#endif
raise(signum);
}
raise(signum);
}
@@
-151,6
+154,10
@@
XBT_INLINE double SIMIX_timer_next(void)
*/
void SIMIX_global_init(int *argc, char **argv)
{
*/
void SIMIX_global_init(int *argc, char **argv)
{
+#ifdef HAVE_MC
+ _sg_do_model_check = getenv(MC_ENV_VARIABLE) != NULL;
+#endif
+
s_smx_process_t proc;
if (!simix_global) {
s_smx_process_t proc;
if (!simix_global) {
@@
-216,9
+223,14
@@
void SIMIX_global_init(int *argc, char **argv)
// We need to communicate initialization of the different layers to the model-checker.
if (mc_mode == MC_MODE_NONE) {
if (getenv(MC_ENV_SOCKET_FD)) {
// We need to communicate initialization of the different layers to the model-checker.
if (mc_mode == MC_MODE_NONE) {
if (getenv(MC_ENV_SOCKET_FD)) {
+
mc_mode = MC_MODE_CLIENT;
MC_client_init();
mc_mode = MC_MODE_CLIENT;
MC_client_init();
- MC_client_hello();
+
+ // Waiting for the model-checker:
+ if (ptrace(PTRACE_TRACEME, 0, NULL, NULL) == -1 || raise(SIGSTOP) != 0)
+ xbt_die("Could not wait for the model-checker");
+
MC_client_handle_messages();
}
}
MC_client_handle_messages();
}
}
@@
-228,6
+240,7
@@
void SIMIX_global_init(int *argc, char **argv)
exit(0);
}
exit(0);
}
+int smx_cleaned = 0;
/**
* \ingroup SIMIX_API
* \brief Clean the SIMIX simulation
/**
* \ingroup SIMIX_API
* \brief Clean the SIMIX simulation
@@
-236,12
+249,11
@@
void SIMIX_global_init(int *argc, char **argv)
*/
void SIMIX_clean(void)
{
*/
void SIMIX_clean(void)
{
- static int cleaned = 0;
#ifdef TIME_BENCH_PER_SR
smx_ctx_raw_new_sr();
#endif
#ifdef TIME_BENCH_PER_SR
smx_ctx_raw_new_sr();
#endif
- if (cleaned) return; // to avoid double cleaning by java and C
- cleaned = 1;
+ if (
smx_
cleaned) return; // to avoid double cleaning by java and C
+
smx_
cleaned = 1;
XBT_DEBUG("SIMIX_clean called. Simulation's over.");
if (!xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() == 0.0) {
XBT_CRITICAL(" ");
XBT_DEBUG("SIMIX_clean called. Simulation's over.");
if (!xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() == 0.0) {
XBT_CRITICAL(" ");
@@
-636,12
+648,12
@@
void SIMIX_display_process_status(void)
break;
}
XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish",
break;
}
XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish",
- process->pid, process->name, sg_host_name(process->host),
+ process->pid, process->name, sg_host_
get_
name(process->host),
synchro_description, process->waiting_synchro,
process->waiting_synchro->name, (int)process->waiting_synchro->state);
}
else {
synchro_description, process->waiting_synchro,
process->waiting_synchro->name, (int)process->waiting_synchro->state);
}
else {
- XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->host));
+ XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_
get_
name(process->host));
}
}
}
}
}
}