Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into master-svn
authorLucas Schnorr <Lucas.Schnorr@imag.fr>
Thu, 31 Mar 2011 09:14:27 +0000 (11:14 +0200)
committerLucas Schnorr <Lucas.Schnorr@imag.fr>
Thu, 31 Mar 2011 09:14:27 +0000 (11:14 +0200)
26 files changed:
CMakeLists.txt
ChangeLog
buildtools/Cmake/Flags.cmake
buildtools/Cmake/GenerateDoc.cmake
buildtools/Cmake/Modules/FindPCRE.cmake
buildtools/Cmake/Modules/FindValgrind.cmake
buildtools/Cmake/Option.cmake
buildtools/pipol/Nightly_simgrid.sh
doc/FAQ.doc
examples/msg/migration/migration.c
examples/msg/migration/migration.deploy
examples/msg/migration/migration.tesh
examples/msg/tracing/procmig.c
include/msg/msg.h
include/simix/simix.h
src/msg/m_process.c
src/simix/process_private.h
src/simix/smurf_private.h
src/simix/smx_global.c
src/simix/smx_process.c
src/simix/smx_smurf.c
src/simix/smx_user.c
src/surf/surf_config.c
src/xbt/log.c
tools/doxygen/doxygen_postprocesser.pl
tools/doxygen/index_php.pl

index 2494972..6ae37c9 100644 (file)
@@ -51,7 +51,6 @@ endif(VBC)
 
 ### Find programs and paths
 FIND_PROGRAM(GCOV_PATH gcov)
-FIND_PROGRAM(VALGRIND_PATH valgrind)
 include(FindPerl)
 if(NOT PERL_EXECUTABLE)
        message(FATAL_ERROR "-- SimGrid cannot be compiled without Perl installed -- sorry. Bailling out.")
index 71d3a60..35da579 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -35,6 +35,8 @@ SimGrid (3.6) unstable; urgency=low
    combine Vivaldi based latencies with last-mile platforms.
 
  Simix
+ * Added a check for NaN of IEEE754 infinite in the double entries of 
+   the smx_user.c file
  * Introduce a new context factory "raw", highly inspirated from the
    ucontext factory, but using manually crafted functions in assembly to
    do the work in an efficient manner.
@@ -50,6 +52,8 @@ SimGrid (3.6) unstable; urgency=low
    processes in parallel only when their number is greater than or equal to P.
 
  XBT
+ * New command line option: if you pass --cfg=verbose-exit:0, SimGrid
+   won't output the state of processes when interrupted with Ctrl-C
  * Add a new function xbt_dynar_to_array that transforms a dynar into a
    NULL-terminated array. This may solve backward compatibility issues
    due to the change to return type of SD_Simulate. See also:
index fc99b1e..6d0cc56 100644 (file)
@@ -8,8 +8,6 @@ else(NOT __VISUALC__ AND NOT __BORLANDC__)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}/Zi")
 endif(NOT __VISUALC__ AND NOT __BORLANDC__)
 
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${custom_flags}")
-
 if(enable_compile_warnings)
        set(warnCFLAGS "-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror ")
 endif(enable_compile_warnings)
@@ -18,8 +16,14 @@ if(enable_compile_optimizations)
        set(optCFLAGS "-O3 -finline-functions -funroll-loops -fno-strict-aliasing ")
 endif(enable_compile_optimizations)
 
+if(NOT enable_debug)
+               set(CMAKE_C_FLAGS "-DNDEBUG ${CMAKE_C_FLAGS}")
+endif(NOT enable_debug)
+
 set(CMAKE_C_FLAGS "${optCFLAGS}${warnCFLAGS}${CMAKE_C_FLAGS}")
 
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${custom_flags}")
+
 if(enable_coverage)
        find_program(GCOV_PATH gcov)
        if(GCOV_PATH)
index bda480e..8be3928 100644 (file)
@@ -140,7 +140,10 @@ else(DOXYGEN_PATH AND FIG2DEV_PATH AND BIBTOOL_PATH AND BIBTEX2HTML_PATH AND ICO
        if(NOT GOOD_BIBTEX2HTML_VERSION) # wrong version
                ADD_CUSTOM_COMMAND(TARGET simgrid_documentation
                        COMMAND ${CMAKE_COMMAND} -E echo "This is not the good bibtex2html program !!!"
-                       COMMAND ${CMAKE_COMMAND} -E echo  "You can download it from : ftp://ftp-sop.inria.fr/epidaure/Softs/bibtex2html/bibtex2html-1.02.tar.gz"
+                       COMMAND ${CMAKE_COMMAND} -E echo  "You can download it from:"
+                       COMMAND ${CMAKE_COMMAND} -E echo  "  ftp://ftp-sop.inria.fr/epidaure/Softs/bibtex2html/bibtex2html-1.02.tar.gz"
+                       COMMAND ${CMAKE_COMMAND} -E echo  "There is also an unofficial Debian/Ubuntu package, see:"
+                       COMMAND ${CMAKE_COMMAND} -E echo  "  http://www.loria.fr/~lnussbau/bibtex2html/README"
                        )
        endif(NOT GOOD_BIBTEX2HTML_VERSION)
 
@@ -151,7 +154,8 @@ else(DOXYGEN_PATH AND FIG2DEV_PATH AND BIBTOOL_PATH AND BIBTEX2HTML_PATH AND ICO
                        COMMAND ${CMAKE_COMMAND} -E echo "BIBTEX2HTML_PATH      = ${BIBTEX2HTML_PATH}"
                        COMMAND ${CMAKE_COMMAND} -E echo "ICONV_PATH            = ${ICONV_PATH}"
                        COMMAND ${CMAKE_COMMAND} -E echo "IN ORDER TO GENERATE THE DOCUMENTATION YOU NEED ALL TOOLS !!!"
-                       COMMAND FAIL TO MAKE SIMGRID DOCUMENTATION see previous messages for details ...
+                       COMMAND ${CMAKE_COMMAND} -E echo "FAIL TO MAKE SIMGRID DOCUMENTATION see previous messages for details ..."
+                       COMMAND false
                        )
 
                
@@ -252,4 +256,4 @@ else(compare_files)
        file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/tmp.realtoc)
 endif(compare_files)   
   
-file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/tmp.curtoc)
\ No newline at end of file
+file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/tmp.curtoc)
index eba8fb9..45eddfe 100644 (file)
@@ -52,4 +52,7 @@ if(PATH_PCRE_LIB)
 message(STATUS "Looking for lib pcre - found")
 else(PATH_PCRE_LIB)
 message(STATUS "Looking for lib pcre - not found")
-endif(PATH_PCRE_LIB)
\ No newline at end of file
+endif(PATH_PCRE_LIB)
+
+mark_as_advanced(PATH_PCRE_H)
+mark_as_advanced(PATH_PCRE_LIB)
\ No newline at end of file
index 22f1fe8..33f022b 100644 (file)
@@ -30,4 +30,6 @@ if(VALGRIND_EXE)
 else(VALGRIND_EXE)
        set(enable_memcheck false)
        message(FATAL_ERROR "Command valgrind not found --> enable_memcheck autoset to false.")
-endif(VALGRIND_EXE)
\ No newline at end of file
+endif(VALGRIND_EXE)
+
+mark_as_advanced(VALGRIND_EXE)
\ No newline at end of file
index c942375..60e1b09 100644 (file)
@@ -37,13 +37,14 @@ option(enable_print_message "Enable print message during config." off)
 option(enable_model-checking "" off)
 option(enable_lib_static "" off)
 option(enable_jedule "Jedule output of SimDAG." off)
+option(enable_debug "Set NDEBUG flag" on)
 
 if(enable_supernovae AND enable_model-checking)
        set(enable_model-checking false CACHE TYPE INTERNAL FORCE)
        message("\n\nWith supernovae mode the model checking must be disable.!!!\n\n")
 endif(enable_supernovae AND enable_model-checking)
 
-mark_as_advanced(PATH_PCRE_LIB)
+
 mark_as_advanced(HAVE_SSH)
 mark_as_advanced(HAVE_RSYNC)
 #mark_as_advanced(enable_coverage)
@@ -66,11 +67,8 @@ mark_as_advanced(ICONV_PATH)
 mark_as_advanced(MAKE_PATH)
 mark_as_advanced(SVN)
 mark_as_advanced(GIT)
-mark_as_advanced(VALGRIND_PATH)
-mark_as_advanced(PATH_PCRE_H)
 mark_as_advanced(CMAKE_OSX_ARCHITECTURES)                                                                                                                  
 mark_as_advanced(CMAKE_OSX_DEPLOYMENT_TARGET)                                                                                                              
 mark_as_advanced(CMAKE_OSX_SYSROOT)                                                                         
 mark_as_advanced(SED_EXE)
 mark_as_advanced(BIBTEX2HTML)
-mark_as_advanced(enable_pcre)
\ No newline at end of file
index 09b4ecf..a16b9d7 100644 (file)
@@ -18,7 +18,7 @@
 #PIPOL esn i386_kvm-linux-debian-testing none 02:00 --user --silent
 #PIPOL esn amd64_kvm-linux-debian-testing none 02:00 --user --silent
 
-#PIPOL esn amd64-windows-server-2008-64bits-navarro-2011-03-15-122256.dd.gz none 02:00 --user --silent
+#PIPOL esn amd64-windows-server-2008-64bits-navarro-2011-03-15-122256.dd.gz none 02:00 --root
 
 if [ -e ./pipol ] ; then
        rm -rf ./pipol/$PIPOL_HOST
index a6ec582..2953a56 100644 (file)
@@ -113,19 +113,8 @@ For Unix and MacOS:
 
 For Windows :
   \li cmake 2.8.3 <a href="http://www.cmake.org/files/v2.8/cmake-2.8.3-win32-x86.exe">(download page)</a>
-  \li Dev-c++ <a href="ftp://75d353a9ed4a246611464e0cb31af917:1296070940@ftpclubic22.clubic.com/logiciel/dev-c-_dev-c_5.0_beta_9.2_anglais_9832.exe">(download page)</a>
   \li perl strawberry <a href="http://www.strawberryperl.com/download/5.12.2.0/strawberry-perl-5.12.2.0.msi">(download page)</a>
   \li pcre-7.0 <a href="http://sourceforge.net/projects/gnuwin32/files/pcre/7.0/pcre-7.0.exe/download">(download page)</a>
-  \li Set environment variables.
-
-\verbatim
-CC                to   C:\Dev-Cpp\bin\gcc
-CXX               to   C:\Dev-Cpp\bin\g++
-INCLUDE                   to   C:\Dev-Cpp\include
-LIB               to   C:\Dev-Cpp\lib
-PCRE_LIBRARY_PATH  to  C:\
-PATH              to   C:\Dev-Cpp\bin
-\endverbatim
 
 \subsubsection faq_cmakeoption1 Liste of options
 
@@ -221,6 +210,13 @@ cmake -D[name]=[value] ... ./
 make
 \endverbatim
 
+On Windows
+
+\verbatim
+cmake -G"Unix Makefiles" -D[name]=[value] ... ./
+gmake
+\endverbatim
+
 \subsubsection faq_cmakecompilation2 With ccmake tool.
 
 \verbatim
index 5abb763..2fc714d 100644 (file)
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
                              "Messages specific for this msg example");
 
+static m_process_t process_to_migrate = NULL;
+
 /** The guy we will move from host to host. It move alone and then is moved by policeman back  */
 static int emigrant(int argc, char *argv[])
 {
   m_task_t task;
   XBT_INFO
       ("I'll look for a new job on another machine where the grass is greener.");
-  MSG_process_change_host(MSG_get_host_by_name("Boivin"));
+  MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Boivin"));
+  
   XBT_INFO("Yeah, found something to do");
   task = MSG_task_create("job", 98095000, 0, NULL);
   MSG_task_execute(task);
   MSG_task_destroy(task);
   MSG_process_sleep(2);
   XBT_INFO("Moving back home after work");
-  MSG_process_change_host(MSG_get_host_by_name("Jacquelin"));
-  MSG_process_change_host(MSG_get_host_by_name("Boivin"));
+  MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Jacquelin"));
+  MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Boivin"));
   MSG_process_sleep(4);
+  process_to_migrate = MSG_process_self();
+  MSG_process_suspend(MSG_process_self());
+  m_host_t h = MSG_process_get_host(MSG_process_self());
+  XBT_INFO("I've been moved on this new host: %s", h->name);
   XBT_INFO("Uh, nothing to do here. Stopping now");
   return 0;
 }                               /* end_of_emigrant */
 
-/* This function would move the emigrant back home, if it were possible to do so in the MSG API.
- * Nothing for now.
- */
+
+/* This function move the emigrant on Jacquelin */
 static int policeman(int argc, char *argv[])
 {
-  XBT_INFO
-      ("No function in the API to move the emigrant back, so do nothing.");
+  XBT_INFO("Wait a bit before migrating the emigrant.");
+  while (process_to_migrate == NULL) MSG_process_sleep(1);
+  MSG_process_migrate(process_to_migrate, MSG_get_host_by_name("Jacquelin"));
+  XBT_INFO("I moved the emigrant");
+  MSG_process_resume(process_to_migrate);
   return 0;
 }                               /* end_of_policeman */
 
@@ -62,6 +71,7 @@ int main(int argc, char *argv[])
 
   /* Application deployment */
   MSG_function_register("emigrant", emigrant);
+  MSG_function_register("policeman", policeman);
   MSG_launch_application(argv[2]);
 
   /* Run the simulation */
index ddff236..272bbaf 100644 (file)
@@ -2,4 +2,5 @@
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
   <process host="Jacquelin" function="emigrant"/>
+  <process host="Boivin" function="policeman"/>
 </platform>
index a75120d..40b247f 100644 (file)
@@ -6,6 +6,9 @@ p Testing the migration feature of MSG
 $ $SG_TEST_EXENV migration/migration ${srcdir:=.}/msg_platform.xml ${srcdir:=.}/migration/migration.deploy  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:emigrant@Jacquelin) I'll look for a new job on another machine where the grass is greener.
 > [  0.000000] (1:emigrant@Boivin) Yeah, found something to do
+> [  0.000000] (2:policeman@Boivin) Wait a bit before migrating the emigrant.
 > [  3.000000] (1:emigrant@Boivin) Moving back home after work
 > [  7.000000] (0:@) Simulation time 7
-> [  7.000000] (1:emigrant@Boivin) Uh, nothing to do here. Stopping now
+> [  7.000000] (1:emigrant@Jacquelin) I've been moved on this new host: Jacquelin
+> [  7.000000] (1:emigrant@Jacquelin) Uh, nothing to do here. Stopping now
+> [  7.000000] (2:policeman@Boivin) I moved the emigrant
index 1878229..5ee80ca 100644 (file)
@@ -26,7 +26,7 @@ static int emigrant(int argc, char *argv[])
     destination = (char*)MSG_task_get_data (task);
     if (!destination) break; //there is no destination, die
     XBT_INFO("Migrating to %s", destination);
-    MSG_process_change_host(MSG_get_host_by_name(destination));
+    MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name(destination));
     MSG_process_sleep(2); // I am tired, have to sleep for 2 seconds
     xbt_free (destination);
     MSG_task_destroy (task);
index 1c53833..b982de1 100644 (file)
@@ -80,7 +80,7 @@ XBT_PUBLIC(m_process_t) MSG_process_create_with_environment(const char
 XBT_PUBLIC(void) MSG_process_kill(m_process_t process);
 XBT_PUBLIC(int) MSG_process_killall(int reset_PIDs);
 
-XBT_PUBLIC(MSG_error_t) MSG_process_change_host(m_host_t host);
+XBT_PUBLIC(MSG_error_t) MSG_process_migrate(m_process_t process, m_host_t host);
 
 XBT_PUBLIC(void *) MSG_process_get_data(m_process_t process);
 XBT_PUBLIC(MSG_error_t) MSG_process_set_data(m_process_t process,
@@ -227,13 +227,13 @@ XBT_PUBLIC(void) MSG_action_register(const char *action_name,
 XBT_PUBLIC(void) MSG_action_unregister(const char *action_name);
 MSG_error_t MSG_action_trace_run(char *path);
 
-
 #ifdef MSG_USE_DEPRECATED
 /* these are the functions which are deprecated. Do not use them, they may get removed in future releases */
 #define MSG_TIMEOUT_FAILURE MSG_TIMEOUT
 #define MSG_mailbox_put_with_time_out(mailbox, task, timeout) \
         MSG_mailbox_put_with_timeout(mailbox, task, timeout)
 
+#define MSG_process_change_host(h) MSG_process_migrate(MSG_process_self(),h);
 #endif
 
 #include "instr/instr.h"
@@ -242,6 +242,5 @@ MSG_error_t MSG_action_trace_run(char *path);
 #include "simix/simix.h"
 XBT_PUBLIC(smx_context_t) MSG_process_get_smx_ctx(m_process_t process);
 
-
 SG_END_DECL()
 #endif
index 967dd5d..7c6a70a 100644 (file)
@@ -134,7 +134,7 @@ XBT_PUBLIC(void) SIMIX_req_process_killall(void);
 /* Process handling */
 XBT_PUBLIC(void) SIMIX_req_process_cleanup(smx_process_t process);
 XBT_PUBLIC(void) SIMIX_req_process_change_host(smx_process_t process,
-                                           const char *source, const char *dest);
+                                              smx_host_t dest);
 XBT_PUBLIC(void) SIMIX_req_process_suspend(smx_process_t process);
 XBT_PUBLIC(void) SIMIX_req_process_resume(smx_process_t process);
 
index 66cafcb..99e606a 100644 (file)
@@ -213,16 +213,15 @@ void MSG_process_kill(m_process_t process)
  * This function checks whether \a process and \a host are valid pointers
    and change the value of the #m_host_t on which \a process is running.
  */
-MSG_error_t MSG_process_change_host(m_host_t host)
+MSG_error_t MSG_process_migrate(m_process_t process, m_host_t host)
 {
-  m_process_t process = MSG_process_self();
-  simdata_process_t simdata = SIMIX_process_self_get_data();
-  m_host_t now = simdata->m_host;
+  simdata_process_t simdata = SIMIX_req_process_get_data(process);
   simdata->m_host = host;
 #ifdef HAVE_TRACING
+  m_host_t now = simdata->m_host;
   TRACE_msg_process_change_host(process, now, host);
 #endif
-  SIMIX_req_process_change_host(process, now->name, host->name);
+  SIMIX_req_process_change_host(process, host->simdata->smx_host);
   return MSG_OK;
 }
 
index cb391c3..8df718c 100644 (file)
@@ -27,6 +27,7 @@ typedef struct s_smx_process {
   int doexception:1;
   int blocked:1;
   int suspended:1;
+  smx_host_t new_host;          /* if not null, the host on which the process must migrate to */
   smx_action_t waiting_action;
   xbt_dict_t properties;
   s_smx_req_t request;
@@ -61,8 +62,11 @@ void SIMIX_process_empty_trash(void);
 void SIMIX_process_yield(void);
 xbt_running_ctx_t *SIMIX_process_get_running_context(void);
 void SIMIX_process_exception_terminate(xbt_ex_t * e);
+void SIMIX_pre_process_change_host(smx_process_t process,
+                                  smx_host_t dest);
 void SIMIX_process_change_host(smx_process_t process,
-    const char *source, const char *dest);
+                              smx_host_t dest);
+void SIMIX_pre_process_change_host(smx_process_t process, smx_host_t host);
 void SIMIX_pre_process_suspend(smx_req_t req);
 void SIMIX_process_suspend(smx_process_t process, smx_process_t issuer);
 void SIMIX_process_resume(smx_process_t process, smx_process_t issuer);
index 7c2dd90..1c15a37 100644 (file)
@@ -233,8 +233,7 @@ typedef struct s_smx_req {
 
     struct {
       smx_process_t process;
-      const char *source;
-      const char *dest;
+      smx_host_t dest;
     } process_change_host;
 
     struct {
index 72ea2c7..b888675 100644 (file)
@@ -35,10 +35,16 @@ extern void smx_ctx_raw_new_sr(void);
 /* FIXME: Yeah, I'll do it in a portable maner one day [Mt] */
 #include <signal.h>
 
+int _surf_do_verbose_exit = 1;
 static void _XBT_CALL inthandler(int ignored)
 {
-  XBT_INFO("CTRL-C pressed. Displaying status and bailing out");
-  SIMIX_display_process_status();
+  if ( _surf_do_verbose_exit ) {
+     XBT_INFO("CTRL-C pressed. Displaying status and bailing out");
+     SIMIX_display_process_status();
+  }
+  else {
+     XBT_INFO("CTRL-C pressed. bailing out without displaying because verbose-exit disabled");
+  }
   exit(1);
 }
 
index 54e7555..3296198 100644 (file)
@@ -234,16 +234,17 @@ void SIMIX_process_killall(smx_process_t issuer)
 }
 
 void SIMIX_process_change_host(smx_process_t process,
-    const char *source, const char *dest)
+                              smx_host_t dest)
 {
-  smx_host_t h1 = NULL;
-  smx_host_t h2 = NULL;
   xbt_assert((process != NULL), "Invalid parameters");
-  h1 = SIMIX_host_get_by_name(source);
-  h2 = SIMIX_host_get_by_name(dest);
-  process->smx_host = h2;
-  xbt_swag_remove(process, h1->process_list);
-  xbt_swag_insert(process, h2->process_list);
+  xbt_swag_remove(process, process->smx_host->process_list);
+  process->smx_host = dest;
+  xbt_swag_insert(process, dest->process_list);
+}
+
+void SIMIX_pre_process_change_host(smx_process_t process, smx_host_t dest)
+{
+  process->new_host = dest;
 }
 
 void SIMIX_pre_process_suspend(smx_req_t req)
@@ -518,6 +519,11 @@ void SIMIX_process_yield(void)
     self->doexception = 0;
     RETHROW;
   }
+  
+  if (self->new_host) {
+    SIMIX_process_change_host(self, self->new_host);
+    self->new_host = NULL;
+  }
 }
 
 /* callback: context fetching */
index cc612ae..840166a 100644 (file)
@@ -377,9 +377,8 @@ void SIMIX_request_pre(smx_req_t req, int value)
       break;
 
     case REQ_PROCESS_CHANGE_HOST:
-      SIMIX_process_change_host(
+      SIMIX_pre_process_change_host(
          req->process_change_host.process,
-         req->process_change_host.source,
          req->process_change_host.dest);
       SIMIX_request_answer(req);
       break;
index 9a5cb0b..fbfc647 100644 (file)
@@ -154,6 +154,10 @@ smx_action_t SIMIX_req_host_execute(const char *name, smx_host_t host,
                                     double computation_amount,
                                     double priority)
 {
+  /* checking for infinite values */
+  xbt_assert(isfinite(computation_amount), "computation_amount is not finite!");
+  xbt_assert(isfinite(priority), "priority is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_HOST_EXECUTE;
@@ -186,6 +190,19 @@ smx_action_t SIMIX_req_host_parallel_execute(const char *name,
                                          double amount,
                                          double rate)
 {
+  int i,j;
+  /* checking for infinite values */
+  for (i = 0 ; i < host_nb ; ++i) {
+     xbt_assert(isfinite(computation_amount[i]), "computation_amount[%d] is not finite!", i);
+     for (j = 0 ; j < host_nb ; ++j) {
+        xbt_assert(isfinite(communication_amount[i + host_nb * j]), 
+                  "communication_amount[%d+%d*%d] is not finite!", i, host_nb, j);
+     }   
+  }   
+  xbt_assert(isfinite(amount), "amount is not finite!");
+  xbt_assert(isfinite(rate), "rate is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_HOST_PARALLEL_EXECUTE;
@@ -271,6 +288,9 @@ e_smx_state_t SIMIX_req_host_execution_get_state(smx_action_t execution)
  */
 void SIMIX_req_host_execution_set_priority(smx_action_t execution, double priority)
 {
+  /* checking for infinite values */
+  xbt_assert(isfinite(priority), "priority is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_HOST_EXECUTION_SET_PRIORITY;
@@ -376,13 +396,12 @@ void SIMIX_req_process_cleanup(smx_process_t process)
  * \param source name of the previous host
  * \param dest name of the new host
  */
-void SIMIX_req_process_change_host(smx_process_t process, const char *source, const char *dest)
+void SIMIX_req_process_change_host(smx_process_t process, smx_host_t dest)
 {
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_PROCESS_CHANGE_HOST;
   req->process_change_host.process = process;
-  req->process_change_host.source = source;
   req->process_change_host.dest = dest;
   SIMIX_request_push();
 }
@@ -565,6 +584,9 @@ xbt_dict_t SIMIX_req_process_get_properties(smx_process_t process)
  */
 e_smx_state_t SIMIX_req_process_sleep(double duration)
 {
+  /* checking for infinite values */
+  xbt_assert(isfinite(duration), "duration is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_PROCESS_SLEEP;
@@ -661,6 +683,11 @@ void SIMIX_req_comm_send(smx_rdv_t rdv, double task_size, double rate,
                          int (*match_fun)(void *, void *), void *data,
                          double timeout)
 {
+  /* checking for infinite values */
+  xbt_assert(isfinite(task_size), "task_size is not finite!");
+  xbt_assert(isfinite(rate), "rate is not finite!");
+  xbt_assert(isfinite(timeout), "timeout is not finite!");
+  
   xbt_assert(rdv, "No rendez-vous point defined for send");
 
   if (MC_IS_ENABLED) {
@@ -691,6 +718,10 @@ smx_action_t SIMIX_req_comm_isend(smx_rdv_t rdv, double task_size, double rate,
                               int (*match_fun)(void *, void *), void *data,
                               int detached)
 {
+  /* checking for infinite values */
+  xbt_assert(isfinite(task_size), "task_size is not finite!");
+  xbt_assert(isfinite(rate), "rate is not finite!");
+  
   xbt_assert(rdv, "No rendez-vous point defined for isend");
 
   smx_req_t req = SIMIX_req_mine();
@@ -712,6 +743,7 @@ smx_action_t SIMIX_req_comm_isend(smx_rdv_t rdv, double task_size, double rate,
 void SIMIX_req_comm_recv(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size,
                          int (*match_fun)(void *, void *), void *data, double timeout)
 {
+  xbt_assert(isfinite(timeout), "timeout is not finite!");
   xbt_assert(rdv, "No rendez-vous point defined for recv");
 
   if (MC_IS_ENABLED) {
@@ -806,6 +838,8 @@ int SIMIX_req_comm_testany(xbt_dynar_t comms)
 
 void SIMIX_req_comm_wait(smx_action_t comm, double timeout)
 {
+  xbt_assert(isfinite(timeout), "timeout is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_COMM_WAIT;
@@ -1026,6 +1060,8 @@ void SIMIX_req_cond_wait_timeout(smx_cond_t cond,
                                  smx_mutex_t mutex,
                                  double timeout)
 {
+  xbt_assert(isfinite(timeout), "timeout is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_COND_WAIT_TIMEOUT;
@@ -1101,6 +1137,8 @@ void SIMIX_req_sem_acquire(smx_sem_t sem)
 
 void SIMIX_req_sem_acquire_timeout(smx_sem_t sem, double timeout)
 {
+  xbt_assert(isfinite(timeout), "timeout is not finite!");
+  
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_SEM_ACQUIRE_TIMEOUT;
index 6e5b341..0fff09f 100644 (file)
@@ -192,6 +192,14 @@ static void _surf_cfg_cb_model_check(const char *name, int pos)
   }
 }
 
+extern int _surf_do_verbose_exit;
+
+static void _surf_cfg_cb_verbose_exit(const char *name, int pos)
+{
+  _surf_do_verbose_exit = xbt_cfg_get_int(_surf_cfg_set, name);
+}
+
+
 static void _surf_cfg_cb_context_factory(const char *name, int pos)
 {
   smx_context_factory_name = xbt_cfg_get_string(_surf_cfg_set, name);
@@ -347,12 +355,21 @@ void surf_config_init(int *argc, char **argv)
                      "Activate the model-checking of the \"simulated\" system (EXPERIMENTAL -- msg only for now)",
                      xbt_cfgelm_int, &default_value_int, 0, 1,
                      _surf_cfg_cb_model_check, NULL);
+    
     /*
        FIXME: this function is not setting model-check to it's default value because
        internally it calls to variable->cb_set that in this case is the function 
-       _surf_cfg_cb_model_check which sets it's value to 1 (instead of the defalut value 0)
+       _surf_cfg_cb_model_check which sets it's value to 1 (instead of the default value 0)
        xbt_cfg_set_int(_surf_cfg_set, "model-check", default_value_int); */
 
+    /* do verbose-exit */
+    default_value_int = 0;
+    xbt_cfg_register(&_surf_cfg_set, "verbose-exit",
+                     "Activate the \"do nothing\" mode in Ctrl-C",
+                     xbt_cfgelm_int, &default_value_int, 0, 1,
+                     _surf_cfg_cb_verbose_exit, NULL);
+    
+    
     /* context factory */
     default_value = xbt_strdup("ucontext");
     xbt_cfg_register(&_surf_cfg_set, "contexts/factory",
index f9cd22f..fac60e0 100644 (file)
@@ -1043,6 +1043,7 @@ void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app)
 
 void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay)
 {
+#define _xbt_log_cat_init(a, b) (0)
   if (!cat->appender) {
     XBT_VERB
         ("No appender to category %s. Setting the file appender as default",
@@ -1057,6 +1058,7 @@ void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay)
   }
   cat->layout = lay;
   xbt_log_additivity_set(cat, 0);
+#undef _xbt_log_cat_init
 }
 
 void xbt_log_additivity_set(xbt_log_category_t cat, int additivity)
index fb7a566..6481604 100755 (executable)
@@ -5,7 +5,7 @@ use strict;
 # Add here the pages of the documentation generated by a @page doxygen macro
 my @extra_files = qw(html/index.html html/faq.html html/history.html html/contrib.html html/people.html
                      html/publis.html html/publis_core.html html/publis_extern.html html/publis_intra.html
-                     html/pages.html html/modules.html  index.php 
+                     html/pages.html html/modules.html html/annotated.html html/functions.html html/functions_vars.html index.php 
                      html/GRAS_tut.html);
 
 # GRAS tutorial
@@ -301,6 +301,8 @@ handle_page($top,-2);# skip roots (we have 2 roots) in level counting
 map {push @allfiles,$_} @extra_files;
 print "All files: ".(join(", ",@allfiles))."\n" if $debug{'parse'};
 
+my $tabs;
+
 foreach my $file (@allfiles) {
     $file =~ s/.html/.handlepage.html/ if $debug{'rename'}; # Take right name if debugging
        
@@ -314,19 +316,43 @@ foreach my $file (@allfiles) {
       print TO '<link href="simgrid.css" rel="stylesheet" type="text/css">'."\n"
         if (m|</head>|);
 
+       
       # Rework the navbar
-      if (m,<li><a href="(doc/)?index.html"><span>Main\&nbsp;Page</span></a></li>,) {
-        print TO '    <li'.($file =~ m,(doc/)?index.html, ? " class='current'" :"").'><a href="'.$1.'index.html"><span>Overview</span></a></li>'."\n";
-        print TO '    <li'.($file =~ m,(doc/)?faq.html, ? " class='current'" :"").'><a href="'.$1.'faq.html"><span>FAQ</span></a></li>'."\n";
-        next;
+      if($file =~ "^html/index.*"){
+             if ($_ =~ /<li><a href="index.html"><span>Main&#160;Page<\/span><\/a><\/li>/) {
+               print TO '      <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>'."\n";
+               next;
+             }
+             elsif ($_ =~ /[\ ]*<li class="current">.*/) {
+               $_ =~ s/ class="current"//g;
+               print TO $_;
+               next;
+             }
+      }
+      if($file =~ "^html/faq.*"){
+               if ($_ =~ /[\ ]*<li class="current">.*/) {
+               $_ =~ s/ class="current"//g;
+               print TO $_;
+               next;
+             }
       }
-      if (m,<li><a href="(doc/)?annotated.html"><span>Data\&nbsp;Structures</span></a></li>,) {
-        print TO '    <li'.($file =~ m,(doc/)?publis(_[^.]*)?.html, ? " class='current'" :"").'><a href="'.$1.'publis.html"><span>Publications</span></a></li>'."\n";
-        print TO '    <li'.($file =~ m,(doc/)?people.html, ? " class='current'" :"").'><a href="'.$1.'people.html"><span>People</span></a></li>'."\n";
-        print TO '    <li'.($file =~ m,(doc/)?history.html, ? " class='current'" :"").'><a href="'.$1.'history.html"><span>History</span></a></li>'."\n";
-        print TO '    <li'.($file =~ m,(doc/)?contrib.html, ? " class='current'" :"").'><a href="'.$1.'contrib.html"><span>Contrib</span></a></li>'."\n";
-        next;
+      if( $_ =~ /<div.*class="tabs">/){$tabs = 1;}
+      if( $_ =~ /<\/div>/){$tabs = 0;}
+      if( $_ =~ /<\/ul>/ && $tabs){
+               if($file =~ "^html/faq.*"){
+               print TO '      <li class="current"><a href="faq.html"><span>FAQ&#160;Page</span></a></li>'."\n";}
+               else{
+               print TO '      <li><a href="faq.html"><span>FAQ&#160;Page</span></a></li>'."\n";}
+               print TO $_;
+               next;
       }
+#      if (m,<li><a href="(doc/)?annotated.html"><span>Data\&nbsp;Structures</span></a></li>,) {
+#        print TO '    <li'.($file =~ m,(doc/)?publis(_[^.]*)?.html, ? " class='current'" :"").'><a href="'.$1.'publis.html"><span>Publications</span></a></li>'."\n";
+#        print TO '    <li'.($file =~ m,(doc/)?people.html, ? " class='current'" :"").'><a href="'.$1.'people.html"><span>People</span></a></li>'."\n";
+#        print TO '    <li'.($file =~ m,(doc/)?history.html, ? " class='current'" :"").'><a href="'.$1.'history.html"><span>History</span></a></li>'."\n";
+#        print TO '    <li'.($file =~ m,(doc/)?contrib.html, ? " class='current'" :"").'><a href="'.$1.'contrib.html"><span>Contrib</span></a></li>'."\n";
+#        next;
+#      }
       s|<span>Modules</span>|<span>Modules API</span>|g;
       s|<span>Related&nbsp;Pages</span>|<span>Site&nbsp;Plan</span>|g;
                                                                                                  
index 567b95a..4d8a9d0 100755 (executable)
@@ -14,9 +14,10 @@ my($body) = "";
 
 open FILE,$inputhtml;
 while(defined($line=<FILE>)) {
-    if($line =~/<div class="tabs">/) {
+    if($line =~/<div id=".*" class="tabs">/) {
        $onglets = $line;
        while(defined($line=<FILE>) && !($line =~/<\/div>/)) {
+               $line =~ s/ class="current"//g;
            $onglets.=$line;
        }
        $onglets.=$line;