Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of github.com:mquinson/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Sat, 2 Feb 2013 23:29:42 +0000 (00:29 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Sat, 2 Feb 2013 23:29:42 +0000 (00:29 +0100)
80 files changed:
.gitignore
ChangeLog
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/Distrib.cmake
buildtools/Cmake/MakeExe.cmake
buildtools/Cmake/MakeLib.cmake
examples/java/async/CMakeLists.txt [new file with mode: 0644]
examples/java/async/async.tesh
examples/java/bittorrent/CMakeLists.txt
examples/java/chord/CMakeLists.txt [new file with mode: 0644]
examples/java/chord/chord.tesh
examples/java/cloud/CMakeLists.txt [new file with mode: 0644]
examples/java/cloud/cloud.tesh
examples/java/commTime/CMakeLists.txt [new file with mode: 0644]
examples/java/commTime/commtime.tesh
examples/java/io/CMakeLists.txt [new file with mode: 0644]
examples/java/kademlia/CMakeLists.txt [new file with mode: 0644]
examples/java/kademlia/kademlia.tesh
examples/java/master_slave_bypass/CMakeLists.txt [new file with mode: 0644]
examples/java/master_slave_bypass/bypass.tesh
examples/java/master_slave_kill/CMakeLists.txt [new file with mode: 0644]
examples/java/master_slave_kill/kill.tesh
examples/java/masterslave/CMakeLists.txt [new file with mode: 0644]
examples/java/masterslave/masterslave.tesh
examples/java/migration/CMakeLists.txt [new file with mode: 0644]
examples/java/migration/migration.tesh
examples/java/mutualExclusion/CMakeLists.txt [new file with mode: 0644]
examples/java/mutualExclusion/Coordinator.java [moved from examples/java/mutualExclusion/centralized/Coordinator.java with 100% similarity]
examples/java/mutualExclusion/GrantTask.java [moved from examples/java/mutualExclusion/centralized/GrantTask.java with 100% similarity]
examples/java/mutualExclusion/MutexCentral.java [moved from examples/java/mutualExclusion/centralized/MutexCentral.java with 100% similarity]
examples/java/mutualExclusion/Node.java [moved from examples/java/mutualExclusion/centralized/Node.java with 100% similarity]
examples/java/mutualExclusion/ReleaseTask.java [moved from examples/java/mutualExclusion/centralized/ReleaseTask.java with 100% similarity]
examples/java/mutualExclusion/RequestTask.java [moved from examples/java/mutualExclusion/centralized/RequestTask.java with 100% similarity]
examples/java/mutualExclusion/mutex_centralized_deployment.xml [moved from examples/java/mutualExclusion/centralized/mutex_centralized_deployment.xml with 100% similarity]
examples/java/mutualExclusion/mutualexclusion.tesh
examples/java/pingPong/CMakeLists.txt [new file with mode: 0644]
examples/java/pingPong/pingpong.tesh
examples/java/priority/CMakeLists.txt [new file with mode: 0644]
examples/java/priority/priority.tesh
examples/java/startKillTime/CMakeLists.txt [new file with mode: 0644]
examples/java/startKillTime/startKillTime.tesh
examples/java/suspend/CMakeLists.txt [new file with mode: 0644]
examples/java/suspend/suspend.tesh
examples/java/tracing/CMakeLists.txt [new file with mode: 0644]
examples/java/tracing/tracingPingPong.tesh
examples/msg/chainsend/broadcaster.c
examples/msg/chainsend/chainsend.tesh
examples/msg/chainsend/deployment_tesh.xml
examples/msg/chainsend/messages.c
examples/msg/chainsend/messages.h
examples/msg/chainsend/peer.c
examples/msg/chainsend/peer.h
examples/msg/mc/bugged1_liveness.c
examples/msg/mc/bugged1_liveness.tesh
examples/msg/mc/chord/chord_neverjoin.tesh
examples/simdag/CMakeLists.txt
include/surf/simgrid_dtd.h
include/xbt/graphxml.h
include/xbt/mmalloc.h
simgrid-java/.gitignore [deleted file]
simgrid-java/CMakeLists.txt [deleted file]
src/bindings/java/jmsg_task.c
src/include/mc/datatypes.h
src/include/mc/mc.h
src/mc/mc_checkpoint.c
src/mc/mc_compare.c
src/mc/mc_dpor.c
src/mc/mc_global.c
src/mc/mc_liveness.c
src/mc/mc_private.h
src/simdag/dax_dtd.c
src/simdag/dax_dtd.h
src/simdag/sd_dotloader.c
src/simix/smx_smurf_private.h
src/smpi/smpi_replay.c
src/surf/simgrid_dtd.c
src/xbt/graphxml.c
src/xbt/mmalloc/mm_diff.c
src/xbt/mmalloc/mm_module.c

index b60eef0..a028368 100644 (file)
@@ -148,11 +148,11 @@ examples/msg/mc/bugged1_while_liveness
 examples/msg/mc/centralized_liveness_deadlock
 examples/msg/mc/test/test_heap_comparison
 examples/msg/mc/chord_liveness
-examples/msg/mc/test/snapshot_comparison_liveness1
-examples/msg/mc/test/snapshot_comparison_liveness2
-examples/msg/mc/test/snapshot_comparison_liveness3
-examples/msg/mc/test/snapshot_comparison_liveness4
-examples/msg/mc/test/snapshot_comparison_liveness5
+examples/msg/mc/test/snapshot_comparison1
+examples/msg/mc/test/snapshot_comparison2
+examples/msg/mc/test/snapshot_comparison3
+examples/msg/mc/test/snapshot_comparison4
+examples/msg/mc/test/snapshot_comparison5
 examples/msg/chainsend/chainsend
 examples/msg/chord/chord
 examples/msg/chord/chord_stateful
index d7b768a..1bd4768 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
 SimGrid (3.10) NOT RELEASED; urgency=low
 
- (to complete)
+ Java:
+ * Reintegrate Java to the main archive as desynchronizing these
+   package is not acceptable anymore (Java is now considered stable)
+ * Bugfix: Task.setDataSize() only changed the C world, not the value 
+   cached in the Java world
 
 -- $date Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
 
index 13121b9..728ea6a 100644 (file)
@@ -317,9 +317,27 @@ if(NOT enable_memcheck)
   ENDIF()
 
   # Java examples
-  set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${CMAKE_BINARY_DIR}/simgrid.jar")
+  set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${SIMGRID_JAR}")
   if(enable_java)
-    ADD_TEST(java-bittorrent ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java bittorrent/bittorrent.tesh)
+    ADD_TEST(java-async                         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java async/async.tesh)
+    ADD_TEST(java-bittorrent                    ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java bittorrent/bittorrent.tesh)
+    ADD_TEST(java-bypass                        ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java master_slave_bypass/bypass.tesh)
+    ADD_TEST(java-chord                         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java chord/chord.tesh)
+    ADD_TEST(java-cloud                         ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java cloud/cloud.tesh)
+    ADD_TEST(java-commTime                      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java commTime/commtime.tesh)
+    ADD_TEST(java-io                            ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java io/io.tesh)
+    ADD_TEST(java-kademlia                      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java kademlia/kademlia.tesh)
+    ADD_TEST(java-kill                          ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java master_slave_kill/kill.tesh)
+    ADD_TEST(java-masterslave                   ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java masterslave/masterslave.tesh)
+    ADD_TEST(java-migration                     ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java migration/migration.tesh)
+    ADD_TEST(java-mutualExclusion               ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java mutualExclusion/mutualexclusion.tesh)
+    ADD_TEST(java-pingPong                      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java pingPong/pingpong.tesh)
+    ADD_TEST(java-priority                      ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java priority/priority.tesh)
+    ADD_TEST(java-startKillTime                 ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java startKillTime/startKillTime.tesh)
+    ADD_TEST(java-suspend                       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java suspend/suspend.tesh)
+    if(HAVE_TRACING)
+      ADD_TEST(java-tracing                       ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java tracing/tracingPingPong.tesh)
+    endif()
   endif()
 
   # Lua examples
index d5e3939..1eebce7 100644 (file)
@@ -372,8 +372,10 @@ set(JTRACE_JAVA_SRC
 
 if(HAVE_TRACING)
   list(APPEND JMSG_C_SRC ${JTRACE_C_SRC})
+  list(APPEND JMSG_JAVA_SRC ${JTRACE_JAVA_SRC})
 else()
   list(APPEND EXTRA_DIST ${JTRACE_C_SRC})
+  list(APPEND EXTRA_DIST ${JTRACE_JAVA_SRC})
 endif()
 
 set(LUA_SRC
@@ -716,7 +718,9 @@ set(txt_files
   AUTHORS
   COPYING
   README
+  README.java
   ChangeLog
+  ChangeLog.SimGrid-java
   INSTALL
   LICENSE-LGPL-2.1
   NEWS
@@ -725,7 +729,24 @@ set(txt_files
   )
 
 set(EXAMPLES_CMAKEFILES_TXT
+  examples/java/CMakeLists.txt
+  examples/java/async/CMakeLists.txt
   examples/java/bittorrent/CMakeLists.txt
+  examples/java/chord/CMakeLists.txt
+  examples/java/cloud/CMakeLists.txt
+  examples/java/commTime/CMakeLists.txt
+  examples/java/io/CMakeLists.txt
+  examples/java/kademlia/CMakeLists.txt
+  examples/java/master_slave_bypass/CMakeLists.txt
+  examples/java/master_slave_kill/CMakeLists.txt
+  examples/java/masterslave/CMakeLists.txt
+  examples/java/migration/CMakeLists.txt
+  examples/java/mutualExclusion/CMakeLists.txt
+  examples/java/pingPong/CMakeLists.txt
+  examples/java/priority/CMakeLists.txt
+  examples/java/startKillTime/CMakeLists.txt
+  examples/java/suspend/CMakeLists.txt
+  examples/java/tracing/CMakeLists.txt
   examples/lua/CMakeLists.txt
   examples/msg/CMakeLists.txt
   examples/msg/actions/CMakeLists.txt
index 6e4ccb2..4e314ba 100644 (file)
@@ -75,6 +75,13 @@ if(enable_lib_static AND NOT WIN32)
   endif()
 endif()
 
+if(enable_java)
+  install(TARGETS SG_java
+      DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
+  install(FILES ${SIMGRID_JAR}
+      DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/)
+endif()
+
 # include files
 set(HEADERS
   ${headers_to_install}
index bd69c83..1ca6822 100644 (file)
@@ -32,7 +32,24 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/pt2pt)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace)
 
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/async)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/chord)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/cloud)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/commTime)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/io)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/kademlia)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_bypass)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_kill)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/masterslave)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/migration)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/mutualExclusion)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/pingPong)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/priority)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/startKillTime)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/suspend)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/tracing)
 
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/actions)
index b713183..dc94f02 100644 (file)
@@ -47,14 +47,10 @@ if(enable_java)
   endif()
 
   set(CMAKE_JAVA_TARGET_OUTPUT_NAME simgrid)
-  set(MANIFEST_FILE ${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF)
   add_jar(SG_java_jar ${JMSG_JAVA_SRC})
-  add_custom_command(TARGET SG_java_jar POST_BUILD
-    COMMENT "Update file MANIFEST.MF in simgrid.jar..."
-    DEPENDS ${MANIFEST_FILE}
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
-    COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} simgrid.jar
-    )
+
+  set(SIMGRID_JAR "${CMAKE_BINARY_DIR}/simgrid.jar")
+  set(MANIFEST_FILE "${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF")
 
   if(CMAKE_SYSTEM_PROCESSOR MATCHES ".86")
     if(${ARCH_32_BITS})
@@ -63,25 +59,40 @@ if(enable_java)
       set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/amd64/")
     endif()
   else()
-    error("Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}")
+    message(WARNING "Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}")
+    set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR/")
   endif()
-  message("Native libraries bundeled into: ${JSG_BUNDLE}")
+  message("Native libraries bundled into: ${JSG_BUNDLE}")
+
+  set(LIBSIMGRID_SO
+    ${CMAKE_SHARED_LIBRARY_PREFIX}simgrid${CMAKE_SHARED_LIBRARY_SUFFIX})
+  set(LIBSG_JAVA_SO
+    ${CMAKE_SHARED_LIBRARY_PREFIX}SG_java${CMAKE_SHARED_LIBRARY_SUFFIX})
 
-  add_custom_command(TARGET SG_java_jar POST_BUILD
-    COMMENT "Combine native libraries in simgrid.jar..."
-    DEPENDS simgrid SG_java
-    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+  add_custom_command(
+    COMMENT "Finalize simgrid.jar..."
+    OUTPUT ${SIMGRID_JAR}_finalized
+    DEPENDS ${SIMGRID_JAR} ${MANIFEST_FILE}
+            ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}
+            ${CMAKE_BINARY_DIR}/lib/${LIBSG_JAVA_SO}
+            ${CMAKE_HOME_DIRECTORY}/COPYING
+            ${CMAKE_HOME_DIRECTORY}/ChangeLog
+            ${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java
     COMMAND ${CMAKE_COMMAND} -E remove_directory "NATIVE"
     COMMAND ${CMAKE_COMMAND} -E make_directory "${JSG_BUNDLE}"
-    COMMAND ${CMAKE_COMMAND} -E copy ./lib/libsimgrid.so "${JSG_BUNDLE}"
-    COMMAND strip --strip-debug "${JSG_BUNDLE}/libsimgrid.so"
-    COMMAND ${CMAKE_COMMAND} -E copy ./lib/libSG_java.so "${JSG_BUNDLE}"
-    COMMAND strip --strip-debug "${JSG_BUNDLE}/libSG_java.so"
+    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}" "${JSG_BUNDLE}"
+    COMMAND ${CMAKE_STRIP} -S "${JSG_BUNDLE}/${LIBSIMGRID_SO}"
+    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/lib/${LIBSG_JAVA_SO}" "${JSG_BUNDLE}"
+    COMMAND ${CMAKE_STRIP} -S "${JSG_BUNDLE}/${LIBSG_JAVA_SO}"
+    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/COPYING" "${JSG_BUNDLE}"
     COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog" "${JSG_BUNDLE}"
     COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java" "${JSG_BUNDLE}"
-    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/COPYING" "${JSG_BUNDLE}"
-    COMMAND ${JAVA_ARCHIVE} -uvf simgrid.jar "NATIVE"
+    COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} ${SIMGRID_JAR} "NATIVE"
+    COMMAND ${CMAKE_COMMAND} -E remove ${SIMGRID_JAR}_finalized
+    COMMAND ${CMAKE_COMMAND} -E touch ${SIMGRID_JAR}_finalized
     )
+  add_custom_target(SG_java_jar_finalize DEPENDS ${SIMGRID_JAR}_finalized)
+  add_dependencies(SG_java_jar SG_java_jar_finalize)
 endif()
 
 add_dependencies(simgrid maintainer_files)
diff --git a/examples/java/async/CMakeLists.txt b/examples/java/async/CMakeLists.txt
new file mode 100644 (file)
index 0000000..18d4de1
--- /dev/null
@@ -0,0 +1,48 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_async)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/AsyncTest.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/async.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/asyncDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/README
+  PARENT_SCOPE
+  )
index 6063d5a..71b6709 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar async/AsyncTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} async/AsyncTest ./platform.xml ./async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (10:async.Slave@Robert) Receiving on 'slave_8'
 > [  0.000000] (11:async.Slave@Sirois) Receiving on 'slave_9'
 > [  0.000000] (12:async.Slave@Monique) Receiving on 'slave_10'
index d96d4cd..a245baa 100644 (file)
@@ -1,5 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
+set(example java_bittorrent)
 set(sources
   ${CMAKE_CURRENT_SOURCE_DIR}/Bittorrent.java
   ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
@@ -11,15 +12,21 @@ set(sources
   )
 
 if(enable_java)
-  add_custom_target(java_bittorrent ALL
-    COMMAND ${JAVA_COMPILE} -cp ${CMAKE_BINARY_DIR}/simgrid.jar
-                            -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources})
-  add_dependencies(java_bittorrent SG_java_jar)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
 endif()
 
 set(tesh_files
   ${tesh_files}
-  examples/bittorrent/bittorrent.tesh
+  ${CMAKE_CURRENT_SOURCE_DIR}/bittorrent.tesh
   PARENT_SCOPE
   )
 set(xml_files
@@ -41,4 +48,3 @@ set(txt_files
   ${CMAKE_CURRENT_SOURCE_DIR}/generate.py
   PARENT_SCOPE
   )
-
diff --git a/examples/java/chord/CMakeLists.txt b/examples/java/chord/CMakeLists.txt
new file mode 100644 (file)
index 0000000..90167e8
--- /dev/null
@@ -0,0 +1,56 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_chord)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Chord.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/ChordTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorAnswerTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorAnswerTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/NotifyTask.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord10.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord100.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord1000.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord10000.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/chord90.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index 03894b4..8360ad2 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar chord/Chord ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/chord/chord.xml
+$ java -cp ${classpath:=.} chord/Chord ./platform.xml ./chord/chord.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [652.540924] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [Boivin:chord.Node:(7) 0.000000] [jmsg/INFO] Joining the ring with id 8 knowing node 1
diff --git a/examples/java/cloud/CMakeLists.txt b/examples/java/cloud/CMakeLists.txt
new file mode 100644 (file)
index 0000000..9dbb0d1
--- /dev/null
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_cloud)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Cloud.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/cloud.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index 4185536..c82c5d2 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar cloud/Cloud ${srcdir:=.}/examples/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} cloud/Cloud ./platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (10:Slave 8@Jean_Yves) Receiving on slave_8
 > [  0.000000] (11:Slave 9@Fafard) Receiving on slave_9
 > [  0.000000] (1:Master@Jacquelin) Launched 10 VMs
diff --git a/examples/java/commTime/CMakeLists.txt b/examples/java/commTime/CMakeLists.txt
new file mode 100644 (file)
index 0000000..320b5c8
--- /dev/null
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_commTime)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/CommTimeTest.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/commtime.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/commTimeDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/README
+  PARENT_SCOPE
+  )
index d21cc19..91f9dbf 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar commTime/CommTimeTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/commTime/commTimeDeployment.xml
+$ java -cp ${classpath:=.} commTime/CommTimeTest ./platform.xml ./commTime/commTimeDeployment.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [7016.452828] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [Bellemarre:commTime.Slave:(15) 0.000000] [jmsg/INFO] Receiving on 'slave_13'
diff --git a/examples/java/io/CMakeLists.txt b/examples/java/io/CMakeLists.txt
new file mode 100644 (file)
index 0000000..767e4d6
--- /dev/null
@@ -0,0 +1,43 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_io)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/IO.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/storage.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
diff --git a/examples/java/kademlia/CMakeLists.txt b/examples/java/kademlia/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8b3833d
--- /dev/null
@@ -0,0 +1,54 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_kademlia)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Answer.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Bucket.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Contact.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeAnswerTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Kademlia.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/KademliaTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/PingAnswerTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/PingTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/RoutingTable.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/kademlia.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/kademlia.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index 7396956..3b177c5 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar kademlia/Kademlia ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/kademlia/kademlia.xml
+$ java -cp ${classpath:=.} kademlia/Kademlia ./platform.xml ./kademlia/kademlia.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [900.000000] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [Boivin:kademlia.Node:(2) 0.000000] [jmsg/INFO] Hi, I'm going to join the network with the id 1!
diff --git a/examples/java/master_slave_bypass/CMakeLists.txt b/examples/java/master_slave_bypass/CMakeLists.txt
new file mode 100644 (file)
index 0000000..9b18ca4
--- /dev/null
@@ -0,0 +1,46 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_master_slave_bypass)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/MsBypass.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/bypass.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index dfcc347..4909781 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar master_slave_bypass/MsBypass ${srcdir:=.}/examples/master_slave_bypass/platform.xml
+$ java -cp ${classpath:=.} master_slave_bypass/MsBypass ./master_slave_bypass/platform.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [0.013010] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [alice:process2:(2) 0.000000] [jmsg/INFO] Slave Hello!
diff --git a/examples/java/master_slave_kill/CMakeLists.txt b/examples/java/master_slave_kill/CMakeLists.txt
new file mode 100644 (file)
index 0000000..34e5b26
--- /dev/null
@@ -0,0 +1,46 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_master_slave_kill)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/MsKill.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/kill.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index 2c7179a..1170918 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar master_slave_kill/MsKill ${srcdir:=.}/examples/master_slave_kill/platform.xml
+$ java -cp ${classpath:=.} master_slave_kill/MsKill ./master_slave_kill/platform.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [0.013010] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [alice:slave:(2) 0.000000] [jmsg/INFO] Slave Hello!
diff --git a/examples/java/masterslave/CMakeLists.txt b/examples/java/masterslave/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c3083f6
--- /dev/null
@@ -0,0 +1,49 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_masterslave)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Masterslave.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/masterslave.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/deploy.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/masterslaveDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/README
+  PARENT_SCOPE
+  )
index fe6de58..8664ff8 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar masterslave/Masterslave ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} masterslave/Masterslave ./platform.xml ./masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:masterslave.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process
 > [  0.000000] (2:masterslave.Forwarder@Jackson) Receiving on 'slave_0'
 > [  0.000000] (3:masterslave.Forwarder@Casavant) Receiving on 'slave_1'
diff --git a/examples/java/migration/CMakeLists.txt b/examples/java/migration/CMakeLists.txt
new file mode 100644 (file)
index 0000000..72108f0
--- /dev/null
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_migration)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Emigrant.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Migration.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Policeman.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/migration.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/migrationDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index e40cb50..e43ca34 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar migration/Migration ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/migration/migrationDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} migration/Migration ./platform.xml ./migration/migrationDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:migration.Emigrant@Jacquelin) I'll look for a new job on another machine where the grass is greener.
 > [  0.000000] (1:migration.Emigrant@Boivin) Yeah, found something to do
 > [  1.000000] (2:migration.Policeman@Boivin) Wait a bit before migrating the emigrant.
diff --git a/examples/java/mutualExclusion/CMakeLists.txt b/examples/java/mutualExclusion/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4593c8c
--- /dev/null
@@ -0,0 +1,49 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_mutualExclusion)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Coordinator.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/GrantTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/MutexCentral.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/ReleaseTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/RequestTask.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/mutualexclusion.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/mutex_centralized_deployment.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/ring3.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index a8ca174..d60949a 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar mutualExclusion/centralized/MutexCentral ${srcdir:=.}/examples/mutualExclusion/ring3.xml ${srcdir:=.}/examples/mutualExclusion/centralized/mutex_centralized_deployment.xml
+$ java -cp ${classpath:=.} mutualExclusion/centralized/MutexCentral ./mutualExclusion/ring3.xml ./mutualExclusion/mutex_centralized_deployment.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [0.007806] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [Host 0:mutualExclusion.centralized.Coordinator:(1) 0.001301] [jmsg/INFO] Got a request from mutualExclusion.centralized.Node. Queue empty: grant it
@@ -11,4 +11,4 @@ $ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar mutualExclusion/cent
 > [Host 1:mutualExclusion.centralized.Node:(2) 0.000000] [jmsg/INFO] Send a request to the coordinator
 > [Host 1:mutualExclusion.centralized.Node:(2) 0.001301] [jmsg/INFO] Wait for a grant from the coordinator
 > [Host 2:mutualExclusion.centralized.Node:(3) 0.000000] [jmsg/INFO] Send a request to the coordinator
-> [Host 2:mutualExclusion.centralized.Node:(3) 0.003903] [jmsg/INFO] Wait for a grant from the coordinator
\ No newline at end of file
+> [Host 2:mutualExclusion.centralized.Node:(3) 0.003903] [jmsg/INFO] Wait for a grant from the coordinator
diff --git a/examples/java/pingPong/CMakeLists.txt b/examples/java/pingPong/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8756c21
--- /dev/null
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_pingPong)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTest.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/pingpong.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/pingPongDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/README
+  PARENT_SCOPE
+  )
index 0100a58..80a83da 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar pingPong/PingPongTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/pingPong/pingPongDeployment.xml
+$ java -cp ${classpath:=.} pingPong/PingPongTest ./platform.xml ./pingPong/pingPongDeployment.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [1.048882] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
 > [Boivin:pingPong.Receiver:(2) 0.000000] [jmsg/INFO] hello!
diff --git a/examples/java/priority/CMakeLists.txt b/examples/java/priority/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a93beec
--- /dev/null
@@ -0,0 +1,44 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_priority)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Priority.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Test.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/priority.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/priorityDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index f7ff99b..28d96e9 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar priority/Priority ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/priority/priorityDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} priority/Priority ./platform.xml ./priority/priorityDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 1.0
 > [  0.000000] (2:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 2.0
 > [  0.833332] (2:priority.Test@Fafard) Goodbye now!
diff --git a/examples/java/startKillTime/CMakeLists.txt b/examples/java/startKillTime/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0a9716a
--- /dev/null
@@ -0,0 +1,48 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_startKillTime)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/StartKillTime.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/startKillTime.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/deployment.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/deployment_kill.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/deployment_start.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/deployment_start_kill.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index edbe382..ecee9ff 100644 (file)
@@ -1,5 +1,5 @@
 #! ./tesh
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar startKillTime/StartKillTime ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/startKillTime/deployment_start_kill.xml
+$ java -cp ${classpath:=.} startKillTime/StartKillTime ./platform.xml ./startKillTime/deployment_start_kill.xml
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [Jacquelin:startKillTime.Master:(1) 0.000000] [jmsg/INFO] Hello!
 > [Boivin:startKillTime.Slave:(2) 1.000000] [jmsg/INFO] Hello!
diff --git a/examples/java/suspend/CMakeLists.txt b/examples/java/suspend/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0ac2dfd
--- /dev/null
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_suspend)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/DreamMaster.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/LazyGuy.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Suspend.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/suspend.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/suspendDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  PARENT_SCOPE
+  )
index c6ec5f7..913f159 100644 (file)
@@ -1,7 +1,7 @@
 #! ./tesh
 
 ! output sort
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar suspend/Suspend ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/suspend/suspendDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -cp ${classpath:=.} suspend/Suspend ./platform.xml ./suspend/suspendDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:suspend.DreamMaster@Jacquelin) Let's create a lazy guy.
 > [  0.000000] (1:suspend.DreamMaster@Jacquelin) Let's wait a little bit...
 > [  0.000000] (2:Lazy@Jacquelin) Nobody's watching me ? Let's go to sleep.
diff --git a/examples/java/tracing/CMakeLists.txt b/examples/java/tracing/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f035001
--- /dev/null
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 2.6)
+
+set(example java_tracing)
+set(sources
+  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java
+  )
+
+if(enable_java)
+  add_custom_command(
+    COMMENT "Building ${example}..."
+    OUTPUT ${example}_compiled
+    DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR}
+    COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR}
+                             -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}
+    COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled
+    COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled
+  )
+  add_custom_target(${example} ALL DEPENDS ${example}_compiled)
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/tracingPingPong.tesh
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/tracingPingPongDeployment.xml
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+  ${sources}
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/README
+  PARENT_SCOPE
+  )
index 3ecaee0..661fd4e 100644 (file)
@@ -2,7 +2,7 @@
 
 ! output sort
 
-$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar tracing/TracingTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/tracing/tracingPingPongDeployment.xml --cfg=tracing:1  --cfg=tracing/filename:simulation.trace --cfg=tracing/platform:1
+$ java -cp ${classpath:=.} tracing/TracingTest ./platform.xml ./tracing/tracingPingPongDeployment.xml --cfg=tracing:1  --cfg=tracing/filename:simulation.trace --cfg=tracing/platform:1
 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to '1'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'simulation.trace'
index 8ab4f44..fc68dab 100644 (file)
@@ -48,8 +48,7 @@ int broadcaster_build_chain(broadcaster_t bc)
       XBT_DEBUG("Building chain -- broadcaster:\"%s\" dest:\"%s\" prev:\"%s\" next:\"%s\"", me, current_host, prev, next);
     
       /* Send message to current peer */
-      task = task_message_chain_new(me, current_host, prev, next);
-      //MSG_task_set_category(task, current_host);
+      task = task_message_chain_new(me, current_host, prev, next, bc->piece_count);
       MSG_task_send(task, current_host);
 
       last = current_host;
@@ -77,27 +76,6 @@ int broadcaster_send_file(broadcaster_t bc)
   return MSG_OK;
 }
 
-int broadcaster_finish(broadcaster_t bc)
-{
-  msg_task_t task = NULL;
-  const char *me = "host0"; /* FIXME: hardcoded*/ /*MSG_host_get_name(MSG_host_self());*/
-  const char *current_host = NULL;
-  char **cur = NULL;
-
-  xbt_dynar_iterator_seek(bc->it, 0);
-
-  /* Send goodbye message to every peer in the order generated by iterator it */
-  for (cur = (char**)xbt_dynar_iterator_next(bc->it); cur != NULL; cur = (char**)xbt_dynar_iterator_next(bc->it)) {
-    /* Send message to current peer */
-    current_host = *cur;
-    task = task_message_end_data_new(me, current_host);
-    //MSG_task_set_category(task, current_host);
-    MSG_task_send(task, current_host);
-  }
-
-  return MSG_OK;
-}
-
 broadcaster_t broadcaster_init(xbt_dynar_t host_list, unsigned int piece_count)
 {
   int status;
@@ -148,7 +126,6 @@ int broadcaster(int argc, char *argv[])
 
   /* TODO: Error checking */
   status = broadcaster_send_file(bc);
-  status = broadcaster_finish(bc);
 
   broadcaster_destroy(bc);
 
index 098df7b..6653235 100644 (file)
@@ -5,12 +5,12 @@ p Testing the chainsend MSG implementation
 ! timeout 60
 ! output sort
 $ $SG_TEST_EXENV ${bindir:=.}/chainsend ${srcdir:=.}/platform_chainsend.xml ${srcdir:=.}/deployment_tesh.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
-> [    5.683972] (2:peer@host1) ### 5.683972 536870912 bytes (Avg 90.077856 MB/s); copy finished (simulated).
-> [    6.936704] (3:peer@host2) ### 6.936704 536870912 bytes (Avg 73.810274 MB/s); copy finished (simulated).
-> [    6.951030] (4:peer@host3) ### 6.951030 536870912 bytes (Avg 73.658146 MB/s); copy finished (simulated).
-> [    6.951486] (5:peer@host4) ### 6.951486 536870912 bytes (Avg 73.653321 MB/s); copy finished (simulated).
-> [    7.170536] (9:peer@host8) ### 7.170536 536870912 bytes (Avg 71.403309 MB/s); copy finished (simulated).
-> [    7.952668] (6:peer@host5) ### 7.952668 536870912 bytes (Avg 64.380908 MB/s); copy finished (simulated).
-> [    7.972487] (7:peer@host6) ### 7.972486 536870912 bytes (Avg 64.220868 MB/s); copy finished (simulated).
-> [    8.972948] (0:@) Total simulation time: 8.972948e+00
-> [    8.972948] (8:peer@host7) ### 8.972948 536870912 bytes (Avg 57.060399 MB/s); copy finished (simulated).
+> [    0.125671] (2:peer@host1) ### 0.125671 16777216 bytes (Avg 127.316430 MB/s); copy finished (simulated).
+> [    0.157894] (3:peer@host2) ### 0.157894 16777216 bytes (Avg 101.333796 MB/s); copy finished (simulated).
+> [    0.158420] (4:peer@host3) ### 0.158420 16777216 bytes (Avg 100.997152 MB/s); copy finished (simulated).
+> [    0.159139] (5:peer@host4) ### 0.159139 16777216 bytes (Avg 100.541154 MB/s); copy finished (simulated).
+> [    0.191593] (6:peer@host5) ### 0.191593 16777216 bytes (Avg 83.510414 MB/s); copy finished (simulated).
+> [    0.191989] (7:peer@host6) ### 0.191989 16777216 bytes (Avg 83.338080 MB/s); copy finished (simulated).
+> [    0.229841] (0:@) Total simulation time: 2.298413e-01
+> [    0.229841] (8:peer@host7) ### 0.229841 16777216 bytes (Avg 69.613244 MB/s); copy finished (simulated).
+> [    0.229841] (9:peer@host8) ### 0.229841 16777216 bytes (Avg 69.613244 MB/s); copy finished (simulated).
index 72825f5..7f4b1f0 100644 (file)
@@ -5,7 +5,7 @@
   <!-- Broadcaster -->
   <process host="host0" function="broadcaster">
        <argument value="8"/> <!-- number of peers -->
-       <argument value="8192"/> <!-- number of pieces -->
+       <argument value="256"/> <!-- number of pieces -->
   </process>
 
   <!-- Peers -->
index 0bc23cd..c91243c 100644 (file)
@@ -11,12 +11,13 @@ msg_task_t task_message_new(e_message_type type, unsigned int len, const char *i
   return task;
 }
 
-msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next)
+msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next, const unsigned int num_pieces)
 {
   msg_task_t task = task_message_new(MESSAGE_BUILD_CHAIN, MESSAGE_BUILD_CHAIN_SIZE, issuer_hostname, mailbox);
   message_t msg = MSG_task_get_data(task);
   msg->prev_hostname = prev;
   msg->next_hostname = next;
+  msg->num_pieces = num_pieces;
 
   return task;
 }
@@ -24,8 +25,6 @@ msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailb
 msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbox, const char *block, unsigned int len)
 {
   msg_task_t task = task_message_new(MESSAGE_SEND_DATA, MESSAGE_SEND_DATA_HEADER_SIZE + len, issuer_hostname, mailbox);
-  //if (strcmp(mailbox, "host4") == 0) 
-  //MSG_task_set_category(task, mailbox);
   message_t msg = MSG_task_get_data(task);
   msg->data_block = block;
   msg->data_length = len;
@@ -33,11 +32,6 @@ msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbo
   return task;
 }
 
-msg_task_t task_message_end_data_new(const char *issuer_hostname, const char *mailbox)
-{
-  return task_message_new(MESSAGE_END_DATA, MESSAGE_END_DATA_SIZE, issuer_hostname, mailbox);
-}
-
 void task_message_delete(void *task)
 {
   message_t msg = MSG_task_get_data(task);
index 52ba874..7118d29 100644 (file)
@@ -11,8 +11,7 @@
 /* Messages enum */
 typedef enum {
   MESSAGE_BUILD_CHAIN = 0,
-  MESSAGE_SEND_DATA,
-  MESSAGE_END_DATA
+  MESSAGE_SEND_DATA
 } e_message_type;
 
 /* Message struct */
@@ -24,13 +23,13 @@ typedef struct s_message {
   const char *next_hostname;
   const char *data_block;
   unsigned int data_length;
+  unsigned int num_pieces;
 } s_message_t, *message_t;
 
 /* Message methods */
 msg_task_t task_message_new(e_message_type type, unsigned int len, const char *issuer_hostname, const char *mailbox);
-msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next);
+msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next, const unsigned int num_pieces);
 msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbox, const char *block, unsigned int len);
-msg_task_t task_message_end_data_new(const char *issuer_hostname, const char *mailbox);
 void task_message_delete(void *);
 
 #endif /* KADEPLOY_MESSAGES_H */
index 43c055d..4d0f9a0 100644 (file)
@@ -11,6 +11,7 @@ void peer_init_chain(peer_t peer, message_t msg)
 {
   peer->prev = msg->prev_hostname;
   peer->next = msg->next_hostname;
+  peer->total_pieces = msg->num_pieces;
   peer->init = 1;
 }
 
@@ -39,11 +40,10 @@ int peer_execute_task(peer_t peer, msg_task_t task)
         peer_forward_msg(peer, msg);
       peer->pieces++;
       peer->bytes += msg->data_length;
-      break;
-    case MESSAGE_END_DATA:
-      xbt_assert(peer->init, "peer_execute_task() failed: got msg_type %d before initialization", msg->type);
-      done = 1;
-      XBT_DEBUG("%d pieces receieved", peer->pieces);
+      if (peer->pieces >= peer->total_pieces) {
+        XBT_DEBUG("%d pieces receieved", peer->pieces);
+        done = 1;
+      }
       break;
   }
 
@@ -91,7 +91,6 @@ void peer_init(peer_t p, int argc, char *argv[])
   p->next = NULL;
   p->pieces = 0;
   p->bytes = 0;
-  p->close_asap = 0;
   p->pending_recvs = xbt_dynar_new(sizeof(msg_comm_t), NULL);
   p->pending_sends = xbt_dynar_new(sizeof(msg_comm_t), NULL);
   p->me = xbt_new(char, HOSTNAME_LENGTH);
@@ -105,17 +104,18 @@ void peer_init(peer_t p, int argc, char *argv[])
 
 void peer_shutdown(peer_t p)
 {
-  float start_time = MSG_get_clock();
-  float end_time = start_time + PEER_SHUTDOWN_DEADLINE;
+  unsigned int size = xbt_dynar_length(p->pending_sends);
+  unsigned int idx;
+  msg_comm_t *comms = xbt_new(msg_comm_t, size);
 
-  XBT_DEBUG("Waiting for sends to finish before shutdown...");
-  /* MSG_comm_waitall(p->pending_sends, PEER_SHUTDOWN_DEADLINE); FIXME: this doesn't work */
-  while (xbt_dynar_length(p->pending_sends) && MSG_get_clock() < end_time) {
-    process_pending_connections(p->pending_sends);
-    MSG_process_sleep(1);
+  for (idx = 0; idx < size; idx++) {
+    comms[idx] = xbt_dynar_get_as(p->pending_sends, idx, msg_comm_t);
   }
 
-  xbt_assert(xbt_dynar_length(p->pending_sends) == 0, "Shutdown failed, sends still pending after deadline");
+  XBT_DEBUG("Waiting for sends to finish before shutdown...");
+  MSG_comm_waitall(comms, size, PEER_SHUTDOWN_DEADLINE);
+
+  xbt_free(comms);
 }
 
 void peer_delete(peer_t p)
index 8727e15..fd20eca 100644 (file)
@@ -19,7 +19,7 @@ typedef struct s_peer {
   unsigned long long bytes;
   xbt_dynar_t pending_recvs;
   xbt_dynar_t pending_sends;
-  int close_asap; /* TODO: unused */
+  unsigned int total_pieces;
 } s_peer_t, *peer_t;
 
 /* Peer: helper functions */
index b646d82..458f509 100644 (file)
@@ -39,7 +39,6 @@ int coordinator(int argc, char *argv[])
       } else {               
         if(strcmp(req, "2") == 0){
           XBT_INFO("CS idle. Grant immediatly");
-          MC_compare();
           answer = MSG_task_create("grant", 0, 1000, NULL);
           MSG_task_send(answer, req);
           CS_used = 1;
index ac0a2cb..01dc2d6 100644 (file)
@@ -13,11 +13,7 @@ $ ${bindir:=.}/bugged1_liveness --cfg=model-check:1 --cfg=contexts/factory:ucont
 > [  0.000000] (1:coordinator@Tremblay) CS release. resource now idle
 > [  0.000000] (3:client@Boivin) Ask the request
 > [  0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly
-> [  0.000000] (3:client@Boivin) 2 got the answer. Sleep a bit and release it
-> [  0.000000] (1:coordinator@Tremblay) CS release. resource now idle
-> [  0.000000] (3:client@Boivin) Ask the request
-> [  0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly
-> [  0.000000] (0:@) Next pair (depth = 33, 2 interleave) already reached !
+> [  0.000000] (0:@) Next pair (depth = 25, 2 interleave) already reached !
 > [  0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
 > [  0.000000] (0:@) |             ACCEPTANCE CYCLE            |
 > [  0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
@@ -46,14 +42,6 @@ $ ${bindir:=.}/bugged1_liveness --cfg=model-check:1 --cfg=contexts/factory:ucont
 > [  0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(3)client -> (1)coordinator])
 > [  0.000000] (0:@) [(3)client] iRecv (dst=client, buff=(verbose only), size=(verbose only))
 > [  0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(1)coordinator -> (3)client])
-> [  0.000000] (0:@) [(1)coordinator] iRecv (dst=coordinator, buff=(verbose only), size=(verbose only))
-> [  0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(1)coordinator -> (3)client])
-> [  0.000000] (0:@) [(3)client] iSend (src=client, buff=(verbose only), size=(verbose only))
-> [  0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(3)client -> (1)coordinator])
-> [  0.000000] (0:@) [(1)coordinator] iRecv (dst=coordinator, buff=(verbose only), size=(verbose only))
-> [  0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(3)client -> (1)coordinator])
-> [  0.000000] (0:@) [(3)client] iSend (src=client, buff=(verbose only), size=(verbose only))
-> [  0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(3)client -> (1)coordinator])
-> [  0.000000] (0:@) Expanded pairs = 34
-> [  0.000000] (0:@) Visited pairs = 32
-> [  0.000000] (0:@) Expanded / Visited = 0.941176
+> [  0.000000] (0:@) Expanded pairs = 26
+> [  0.000000] (0:@) Visited pairs = 24
+> [  0.000000] (0:@) Expanded / Visited = 0.923077
\ No newline at end of file
index 32c6d21..24427a4 100644 (file)
@@ -10,7 +10,7 @@ $ ${bindir:=.}/chord_liveness --cfg=model-check:1 --cfg=contexts/factory:ucontex
 > [  0.000000] (3:node@Jacquelin) A transfer has occured
 > [  0.000000] (3:node@Jacquelin) The task was successfully received by node 1
 > [  0.000000] (1:node@Jean_Yves) Node 14 joined the ring
-> [  0.000000] (0:@) Next pair (depth = 12, 2 interleave) already reached !
+> [  0.000000] (0:@) Next pair (depth = 11, 2 interleave) already reached !
 > [  0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
 > [  0.000000] (0:@) |             ACCEPTANCE CYCLE            |
 > [  0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
@@ -25,7 +25,6 @@ $ ${bindir:=.}/chord_liveness --cfg=model-check:1 --cfg=contexts/factory:ucontex
 > [  0.000000] (0:@) [(1)node] Wait (comm=(verbose only) [(3)node -> (1)node])
 > [  0.000000] (0:@) [(1)node] iRecv (dst=node, buff=(verbose only), size=(verbose only))
 > [  0.000000] (0:@) [(1)node] Test FALSE (comm=(verbose only))
-> [  0.000000] (0:@) [(1)node] Test FALSE (comm=(verbose only))
-> [  0.000000] (0:@) Expanded pairs = 16
-> [  0.000000] (0:@) Visited pairs = 11
-> [  0.000000] (0:@) Expanded / Visited = 0.687500
\ No newline at end of file
+> [  0.000000] (0:@) Expanded pairs = 14
+> [  0.000000] (0:@) Visited pairs = 10
+> [  0.000000] (0:@) Expanded / Visited = 0.714286
index afb0ab6..91c8327 100644 (file)
@@ -9,7 +9,10 @@ add_executable(sd_avail sd_avail.c)
 add_executable(sd_typed_tasks_test sd_typed_tasks_test.c)
 add_executable(sd_comm_throttling sd_comm_throttling.c)
 add_executable(sd_seq_access sd_seq_access.c)
-add_executable(simdag_tracing simdag_trace.c)
+
+if (HAVE_TRACING)
+  add_executable(simdag_tracing simdag_trace.c)
+endif()
 
 ### Add definitions for compile
 if(NOT WIN32)
@@ -20,7 +23,10 @@ if(NOT WIN32)
   target_link_libraries(sd_typed_tasks_test simgrid pthread m )
   target_link_libraries(sd_comm_throttling simgrid pthread m )
   target_link_libraries(sd_seq_access simgrid pthread m )
-  target_link_libraries(simdag_tracing simgrid pthread m )
+  
+  if (HAVE_TRACING)
+    target_link_libraries(simdag_tracing simgrid pthread m )
+  endif()
 
   add_custom_command(TARGET ex_sd_test
     POST_BUILD
@@ -40,8 +46,10 @@ else()
   target_link_libraries(sd_typed_tasks_test simgrid)
   target_link_libraries(sd_comm_throttling simgrid)
   target_link_libraries(sd_seq_access simgrid)
-  target_link_libraries(simdag_tracing simgrid)
-
+  if (HAVE_TRACING)
+    target_link_libraries(simdag_tracing simgrid)
+  endif()
+  
   add_custom_command(TARGET ex_sd_test
     POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ex_sd_test.exe ${CMAKE_CURRENT_BINARY_DIR}/sd_test.exe
index 47e90bb..c9c5b90 100644 (file)
@@ -2,8 +2,8 @@
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -12,7 +12,7 @@
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
index 824144c..272239c 100644 (file)
@@ -2,8 +2,8 @@
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -12,7 +12,7 @@
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
index c259bf6..6c520bf 100644 (file)
@@ -61,11 +61,12 @@ XBT_PUBLIC( xbt_mheap_t ) mmalloc_get_default_md(void);
 void mmalloc_set_current_heap(xbt_mheap_t new_heap);
 xbt_mheap_t mmalloc_get_current_heap(void);
 
-int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stacks1, xbt_dynar_t *stacks2, xbt_dynar_t equals);
+int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2);
 int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2);
-void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2);
-void match_equals(xbt_dynar_t list, xbt_dynar_t equals);
-int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equals);
+void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t to_ignore1, xbt_dynar_t to_ignore2);
+void match_equals(xbt_dynar_t list);
+int compare_area(void *area1, void* area2, xbt_dynar_t previous);
+void reset_heap_information(void);
 
 void mmalloc_backtrace_block_display(void* heapinfo, int block);
 void mmalloc_backtrace_fragment_display(void* heapinfo, int block, int frag);
@@ -73,6 +74,6 @@ void mmalloc_backtrace_display(void *addr);
 
 int is_free_area(void *area, xbt_mheap_t heap);
 
-size_t mmalloc_get_chunks_used(xbt_mheap_t);
+size_t mmalloc_get_bytes_used(xbt_mheap_t);
 
 #endif                          /* MMALLOC_H */
diff --git a/simgrid-java/.gitignore b/simgrid-java/.gitignore
deleted file mode 100644 (file)
index 7cae982..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-*.tag
-Doxyfile
-footer.html
-doc/html
-*.class
-simgrid.jar
-libSG_java.so*
-build/
-*.dylib
-.project
-.cproject
-.classpath
-*~
\ No newline at end of file
diff --git a/simgrid-java/CMakeLists.txt b/simgrid-java/CMakeLists.txt
deleted file mode 100644 (file)
index 230d671..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project(SimGrid-Java C)
-set(UPDATE_TYPE svn)
-set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE)
-set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/lib")
-set(soversion 1)
-
-set(SIMGRID_JAVA_VERSION_MAJOR "3")
-set(SIMGRID_JAVA_VERSION_MINOR "10")
-set(SIMGRID_JAVA_VERSION_PATCH "0")
-set(DIST_NAME ${PROJECT_NAME}-${SIMGRID_JAVA_VERSION_MAJOR}.${SIMGRID_JAVA_VERSION_MINOR}.${SIMGRID_JAVA_VERSION_PATCH})
-
-########
-## GCC #
-########
-exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION")
-string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}")
-string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_VERSION_MAJOR_MINOR "${COMPILER_C_VERSION}")
-string(REPLACE "${COMPILER_C_VERSION_MAJOR_MINOR}." "" COMPILER_C_VERSION_PATCH "${COMPILER_C_VERSION}")
-
-########
-## GIT #
-########
-if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32)
-  exec_program("git remote | head -n 1" OUTPUT_VARIABLE remote RETURN_VALUE ret)
-  exec_program("git config --get remote.${remote}.url" OUTPUT_VARIABLE url RETURN_VALUE ret)
-
-  if(url)
-    exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --oneline -1" OUTPUT_VARIABLE "GIT_VERSION")
-    message(STATUS "Git version: ${GIT_VERSION}")
-    exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --format=%ai ." OUTPUT_VARIABLE "GIT_DATE")
-    message(STATUS "Git date: ${GIT_DATE}")
-    string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
-    STRING(REPLACE " +0000" "" GIT_DATE ${GIT_DATE})
-    STRING(REPLACE " " "~" GIT_DATE ${GIT_DATE})
-    STRING(REPLACE ":" "-" GIT_DATE ${GIT_DATE})
-  endif(url)
-endif(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32)
-
-#########
-# CDASH #
-#########
-SET(DROP_METHOD "http")
-SET(DROP_SITE "cdash.inria.fr/CDash")
-SET(DROP_LOCATION "/submit.php?project=simgrid")
-SET(DROP_SITE_CDASH TRUE)
-SET(TRIGGER_SITE "http://cdash.inria.fr/CDash/cgi-bin/Submit-Random-TestingResults.cgi")
-SET(BUILDNAME "SimGrid-Java" CACHE TYPE INTERNAL FORCE)
-set(osname ${CMAKE_SYSTEM_NAME})
-set(cpu ${CMAKE_SYSTEM_PROCESSOR})
-set(DISTRIB2 ${CMAKE_SYSTEM_VERSION})
-SET(SITE "${osname}_${DISTRIB2}_${cpu}")
-SET(CTEST_SITE "${osname}_${DISTRIB2}_${cpu}")
-SET(CTEST_PROJECT_NAME "${PROJECT_NAME}")
-SET(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE "3000000")
-SET(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "3000000")
-set(PIPOL_IMAGE $ENV{PIPOL_IMAGE})
-if(NOT ${PIPOL_IMAGE} MATCHES "\n")
-set(SITE ${PIPOL_IMAGE})
-endif(NOT ${PIPOL_IMAGE} MATCHES "\n")
-message(STATUS "SITE        : ${SITE}")
-message(STATUS "BUILDNAME   : ${BUILDNAME}")
-
-###############################
-# Test the build dependencies #
-###############################
-include(FindSimGrid.cmake)
-include(FindJavaSG.cmake)
-
-# Check for option tracing in SimGrid
-include(CheckLibraryExists)
-CHECK_LIBRARY_EXISTS(${SIMGRID_LIB} TRACE_start "" HAVE_TRACING)
-if(NOT HAVE_TRACING)
-  message(STATUS "Warning: SimGrid-java must be linked with library Simgrid included trace option to enable tracing.")
-  message(STATUS "Warning: See http://simgrid.gforge.inria.fr/simgrid/3.8/doc/tracing.html to see how compile SimGrid library with this option.")
-endif(NOT HAVE_TRACING)
-
-###############################
-# Declare our package content #
-###############################
-set(JMSG_C_SRC
-  ${CMAKE_HOME_DIRECTORY}/src/smx_context_cojava.h
-  ${CMAKE_HOME_DIRECTORY}/src/smx_context_cojava.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_file.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_file.h
-  ${CMAKE_HOME_DIRECTORY}/src/smx_context_java.h
-  ${CMAKE_HOME_DIRECTORY}/src/smx_context_java.c
-  ${CMAKE_HOME_DIRECTORY}/src/jxbt_utilities.c
-  ${CMAKE_HOME_DIRECTORY}/src/jxbt_utilities.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg.c 
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_comm.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_comm.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_host.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_host.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_process.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_process.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_task.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_task.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_synchro.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_synchro.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_rngstream.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_rngstream.h
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_vm.c
-  ${CMAKE_HOME_DIRECTORY}/src/jmsg_vm.h
-)
-
-set(JTRACE_C_SRC
-  ${CMAKE_HOME_DIRECTORY}/src/jtrace.c
-  ${CMAKE_HOME_DIRECTORY}/src/jtrace.h
-)      
-
-set(JMSG_JAVA_SRC
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Host.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/HostFailureException.java    
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/HostNotFoundException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/File.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/JniException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Msg.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/MsgException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/NativeException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Process.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/ProcessKilledError.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/ProcessNotFoundException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Task.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TaskCancelledException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TimeoutException.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TransferFailureException.java        
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Mutex.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Comm.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/RngStream.java
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/VM.java
-)
-set(JTRACE_JAVA_SRC
-  ${CMAKE_HOME_DIRECTORY}/org/simgrid/trace/Trace.java
-)
-
-set(JAVA_EXAMPLES
-  ${CMAKE_HOME_DIRECTORY}/examples/async/AsyncTest.java
-  ${CMAKE_HOME_DIRECTORY}/examples/async/FinalizeTask.java  
-  ${CMAKE_HOME_DIRECTORY}/examples/async/Forwarder.java
-  ${CMAKE_HOME_DIRECTORY}/examples/async/Master.java  
-  ${CMAKE_HOME_DIRECTORY}/examples/async/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Bittorrent.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Common.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Connection.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/MessageTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Peer.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Tracker.java
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/TrackerTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/Chord.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/Common.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/Node.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/ChordTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/FindSuccessorAnswerTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/FindSuccessorTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorAnswerTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/NotifyTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/cloud/Cloud.java
-  ${CMAKE_HOME_DIRECTORY}/examples/cloud/FinalizeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/cloud/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/cloud/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/FinalizeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/CommTimeTest.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Answer.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Bucket.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Common.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Contact.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Kademlia.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Node.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/RoutingTable.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/FindNodeAnswerTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/FindNodeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/KademliaTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/PingAnswerTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/PingTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/io/IO.java
-  ${CMAKE_HOME_DIRECTORY}/examples/io/Node.java
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/FinalizeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Forwarder.java
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Masterslave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Slave.java      
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/MsBypass.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/FinalizeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/MsKill.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/FinalizeTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/migration/Emigrant.java
-  ${CMAKE_HOME_DIRECTORY}/examples/migration/Migration.java
-  ${CMAKE_HOME_DIRECTORY}/examples/migration/Policeman.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/MutexCentral.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/GrantTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/Coordinator.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/ReleaseTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/Node.java
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/RequestTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/PingPongTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/Sender.java
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/Receiver.java
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/PingPongTest.java
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/Master.java
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/Slave.java
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/StartKillTime.java
-  ${CMAKE_HOME_DIRECTORY}/examples/suspend/DreamMaster.java
-  ${CMAKE_HOME_DIRECTORY}/examples/suspend/LazyGuy.java
-  ${CMAKE_HOME_DIRECTORY}/examples/suspend/Suspend.java
-)
-set(JAVA_TRACING_EXAMPLES
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/PingPongTask.java
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/Sender.java
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/Receiver.java
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/TracingTest.java
-)
-
-set(CMAKE_SRC
-  ${CMAKE_HOME_DIRECTORY}/ChangeLog
-  ${CMAKE_HOME_DIRECTORY}/MANIFEST.MF
-  ${CMAKE_HOME_DIRECTORY}/COPYING
-  ${CMAKE_HOME_DIRECTORY}/CMakeLists.txt
-  ${CMAKE_HOME_DIRECTORY}/doxygen_postprocesser.pl
-  ${CMAKE_HOME_DIRECTORY}/FindJavaSG.cmake
-  ${CMAKE_HOME_DIRECTORY}/FindSimGrid.cmake
-  ${CMAKE_HOME_DIRECTORY}/GenerateDoc.cmake
-  ${CMAKE_HOME_DIRECTORY}/README
-)
-
-set(CMAKE_DOC_SRC
-  ${CMAKE_HOME_DIRECTORY}/doc/Doxyfile.in
-  ${CMAKE_HOME_DIRECTORY}/doc/footer.html.in
-  ${CMAKE_HOME_DIRECTORY}/doc/index.doc
-  ${CMAKE_HOME_DIRECTORY}/doc/install.doc
-)
-
-set(XML_FILES
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/platform.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/platform.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/commTimeDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/async/asyncDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/migration/migrationDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/deploy.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslaveDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord100.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord10.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord10000.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord1000.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord90.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/kademlia/kademlia.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/platform.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/mutex_centralized_deployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/ring3.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/priority/priorityDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingPongDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_kill.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_start.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_start_kill.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspendDeployment.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/io/storage.xml
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPongDeployment.xml
-)
-
-set(TESH_FILES
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/bypass.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/commTime/commtime.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/async/async.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/mutualexclusion.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/priority/priority.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingpong.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/startKillTime.tesh
-  ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPong.tesh
-)
-
-set(source_to_pack
-  ${CMAKE_SRC}
-  ${JMSG_C_SRC}
-  ${JTRACE_C_SRC}
-  ${JMSG_JAVA_SRC}
-  ${JTRACE_JAVA_SRC}
-  ${JAVA_EXAMPLES}
-  ${JAVA_TRACING_EXAMPLES}
-  ${XML_FILES}
-  ${CMAKE_DOC_SRC}
-  ${TESH_FILES}
-)
-
-string(REPLACE "org/" "classes/org/" JMSG_JAVA_SRC_CLASS "${JMSG_JAVA_SRC}")
-string(REPLACE ".java" ".class" JMSG_JAVA_SRC_CLASS "${JMSG_JAVA_SRC_CLASS}")
-
-string(REPLACE "org/" "classes/org/" JTRACE_JAVA_SRC_CLASS "${JTRACE_JAVA_SRC}")
-string(REPLACE ".java" ".class" JTRACE_JAVA_SRC_CLASS "${JTRACE_JAVA_SRC_CLASS}")
-
-string(REPLACE ".java" ".class" JAVA_EXAMPLES_CLASS "${JAVA_EXAMPLES}")
-string(REPLACE ".java" ".class" JAVA_TRACING_EXAMPLES_CLASS "${JAVA_TRACING_EXAMPLES}")
-
-#########
-# FLAGS #
-#########
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -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 ")
-set(INCLUDE_PATH "-I${CMAKE_HOME_DIRECTORY}/src -I${SIMGRID_INCLUDES} ")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${INCLUDE_PATH}")
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=int-to-pointer-cast -Wno-error=pointer-to-int-cast")
-if(COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-but-set-variable")
-endif(COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6")
-
-###########
-# TARGETS #
-###########
-# SG_java
-add_library(SG_java SHARED ${JMSG_C_SRC})
-if(WIN32)
-  set_target_properties(SG_java PROPERTIES LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB}" PREFIX "")
-  find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS)
-  message(STATUS "pexports: ${PEXPORTS_PATH}")
-  if(PEXPORTS_PATH)
-    add_custom_command(TARGET SG_java POST_BUILD
-    COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java.dll > ${CMAKE_BINARY_DIR}/SG_java.def)
-  endif(PEXPORTS_PATH)
-else(WIN32)
-  target_link_libraries(SG_java pcre pthread simgrid)
-  set_target_properties(SG_java PROPERTIES LINK_FLAGS "-L${SIMGRID_LIB_PATH}")
-endif(WIN32)
-
-if(HAVE_TRACING)
-# SG_java_tracing
-add_library(SG_java_tracing SHARED ${JTRACE_C_SRC})
-  if(WIN32)
-    set_target_properties(SG_java_tracing PROPERTIES LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB}" PREFIX "")
-    find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS)
-    message(STATUS "pexports: ${PEXPORTS_PATH}")
-    if(PEXPORTS_PATH)
-      add_custom_command(TARGET SG_java_tracing POST_BUILD
-      COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java_tracing.dll > ${CMAKE_BINARY_DIR}/SG_java_tracing.def)
-    endif(PEXPORTS_PATH)
-  else(WIN32)
-    target_link_libraries(SG_java_tracing pcre pthread simgrid)
-    set_target_properties(SG_java_tracing PROPERTIES LINK_FLAGS "-L${SIMGRID_LIB_PATH}")
-  endif(WIN32)
-endif(HAVE_TRACING)
-
-set(JAVA_SRC
-  ${JMSG_JAVA_SRC}
-)
-set(JAVA_SRC_CLASS
-  ${JMSG_JAVA_SRC_CLASS}
-)
-if(HAVE_TRACING)
-  set(JAVA_SRC
-    ${JAVA_SRC}
-    ${JTRACE_JAVA_SRC}
-  )
-  set(JAVA_SRC_CLASS
-    ${JAVA_SRC_CLASS}
-    ${JTRACE_JAVA_SRC_CLASS}
-  )
-endif(HAVE_TRACING)
-
-IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86")
-  IF(${ARCH_32_BITS})
-      set(JSG_BUNDLE NATIVE/${CMAKE_SYSTEM_NAME}/x86/)
-  ELSE()
-      set(JSG_BUNDLE NATIVE/${CMAKE_SYSTEM_NAME}/amd64/)
-  ENDIF()
-ELSE() 
-  error("Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}")
-ENDIF()
-message("Native libraries bundeled into: ${JSG_BUNDLE}")
-
-# java_classes
-add_custom_command(
-  OUTPUT  ${JAVA_SRC_CLASS}
-  DEPENDS ${JAVA_SRC}
-  COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_HOME_DIRECTORY}/classes/"
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/classes/
-    -cp ${CMAKE_HOME_DIRECTORY}/classes/ ${JAVA_SRC}
-  COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}
-  COMMAND ${CMAKE_COMMAND} -E copy ${SIMGRID_LIB_PATH}/libsimgrid.so ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}
-  COMMAND strip --strip-debug ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}/libsimgrid.so
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/lib/libSG_java.so ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}
-  COMMAND strip --strip-debug ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}/libSG_java.so
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/ChangeLog ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/COPYING ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}
-  COMMENT "Compiling java sources of core library..."                                  
-)
-
-add_custom_target(java_classes ALL
-  DEPENDS ${JAVA_SRC_CLASS}
-)
-
-# simgrid_jar
-add_custom_target(simgrid_jar ALL
-  COMMAND ${JAVA_ARCHIVE} -cmvf ${CMAKE_HOME_DIRECTORY}/MANIFEST.MF ${CMAKE_HOME_DIRECTORY}/simgrid.jar .
-  COMMENT "Building simgrid.jar..."
-  WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/classes 
-)
-
-# simgrid_java_examples
-set(JAVA_EXAMPLES_CLASS
-  ${JAVA_EXAMPLES_CLASS}
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/MessageTask$Type.class
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Peer$1.class
-  ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/TrackerTask$Type.class
-  ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorTask.class
-  ${CMAKE_HOME_DIRECTORY}/examples/priority/Test.class
-  ${CMAKE_HOME_DIRECTORY}/examples/priority/Priority.class
-)
-
-add_custom_command(
-  COMMENT "Build examples for java"
-  OUTPUT  ${JAVA_EXAMPLES_CLASS}
-  DEPENDS ${JAVA_EXAMPLES}
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/async/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/chord/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/cloud/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/commTime/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/kademlia/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/io/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/masterslave/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/migration/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/*.java                                      
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/pingPong/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/priority/*.java         
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/*.java
-  COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/suspend/*.java
-)
-if(HAVE_TRACING)
-    add_custom_command(
-      COMMENT "Build examples for tracing java"
-      OUTPUT  ${JAVA_TRACING_EXAMPLES_CLASS} 
-      DEPENDS ${JAVA_TRACING_EXAMPLES} ${JAVA_EXAMPLES_CLASS}
-      COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/tracing/*.java
-  )
-  add_custom_target(simgrid_java_examples ALL
-    DEPENDS ${JAVA_EXAMPLES_CLASS} ${JAVA_TRACING_EXAMPLES_CLASS}
-  )
-else(HAVE_TRACING)
-  add_custom_target(simgrid_java_examples ALL
-    DEPENDS ${JAVA_EXAMPLES_CLASS}
-  )
-endif(HAVE_TRACING)
-
-
-########################
-# Declare dependencies #
-########################
-add_dependencies(simgrid_jar java_classes)
-add_dependencies(simgrid_java_examples simgrid_jar SG_java)
-if(HAVE_TRACING)
-  add_dependencies(simgrid_java_examples SG_java_tracing)
-endif(HAVE_TRACING)
-
-#####################
-# Declare our tests #
-#####################
-INCLUDE(CTest)
-ENABLE_TESTING()
-
-ADD_TEST(async           ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/async/async.tesh)
-ADD_TEST(bittorrent      ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.tesh)
-ADD_TEST(bypass          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/bypass.tesh)
-ADD_TEST(commTime        ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/commTime/commtime.tesh)
-ADD_TEST(chord          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh)
-ADD_TEST(cloud          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh)
-ADD_TEST(kademlia       ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/kademlia/kademlia.tesh)
-ADD_TEST(kill            ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh)
-ADD_TEST(masterslave     ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh)
-ADD_TEST(migration       ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh)
-ADD_TEST(mutualExclusion ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/mutualexclusion.tesh)
-ADD_TEST(pingPong        ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingpong.tesh)
-ADD_TEST(priority        ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/priority/priority.tesh)
-ADD_TEST(startKillTime   ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/startKillTime.tesh)
-ADD_TEST(suspend         ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh)
-#Don't forget to put new test in this list!!!
-set(test_list async bittorrent bypass chord cloud commTime kademlia kill masterslave migration mutualExclusion pingPong priority startKillTime suspend)
-if(HAVE_TRACING)
-  ADD_TEST(tracing         ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPong.tesh)
-  set(test_list ${test_list} tracing)
-endif(HAVE_TRACING)
-##########################################
-# Set the  DYLD_LIBRARY_PATH for mac     #
-##########################################
-if(APPLE)
-  if($ENV{DYLD_LIBRARY_PATH})
-    set_tests_properties(${test_list}
-    PROPERTIES ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}")
-  else($ENV{DYLD_LIBRARY_PATH})
-    set_tests_properties(${test_list}
-    PROPERTIES ENVIRONMENT "DYLD_LIBRARY_PATH=$ENV{DYLD_LIBRARY_PATH}:${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}")
-  endif($ENV{DYLD_LIBRARY_PATH})
-else(APPLE)
-##########################################
-# Set the  LD_LIBRARY_PATH for our tests #
-##########################################
-  if(NOT WIN32)
-    if($ENV{LD_LIBRARY_PATH})
-      set_tests_properties(${test_list}
-      PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}")
-    else($ENV{LD_LIBRARY_PATH})
-      set_tests_properties(${test_list}
-      PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}")
-    endif($ENV{LD_LIBRARY_PATH})
-  endif(NOT WIN32)
-endif(APPLE)
-
-###########
-# Install #
-###########
-install(TARGETS SG_java
-  DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/)
-
-if(HAVE_TRACING)
-  install(TARGETS SG_java_tracing
-    DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/)
-endif(HAVE_TRACING)
-install(FILES ${CMAKE_HOME_DIRECTORY}/simgrid.jar
-  DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/)
-
-
-#########
-# Dist  #
-#########
-add_custom_target(dist-dir
-  COMMENT "Generating the distribution directory"
-  COMMAND test -e ${DIST_NAME}/ && chmod -R a+w ${DIST_NAME}/ || true
-  COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_NAME}/
-  COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME}
-  COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME}/doc/html/
-  COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/doc/html/ ${DIST_NAME}/doc/html/
-)
-
-set(dirs_in_tarball "")
-foreach(file ${source_to_pack})
-
-  # This damn prefix is still set somewhere (seems to be in subdirs)
-  string(REPLACE "${CMAKE_HOME_DIRECTORY}/" "" file "${file}")
-  
-  # Create the directory on need
-  get_filename_component(file_location ${file} PATH)
-  string(REGEX MATCH ";${file_location};" OPERATION "${dirs_in_tarball}")
-  if(NOT OPERATION)
-    set(dirs_in_tarball "${dirs_in_tarball};${file_location};")
-    add_custom_command(
-      TARGET dist-dir
-      COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME}/${file_location}/
-    )       
-  endif(NOT OPERATION)
-   
-   # Actually copy the file
-  add_custom_command(
-    TARGET dist-dir
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/${file} ${DIST_NAME}/${file_location}/
-  )
-endforeach(file ${source_to_pack})
-
-add_custom_target(dist
-  DEPENDS ${CMAKE_BINARY_DIR}/${DIST_NAME}.tar.gz
-  COMMENT "Generated ${DIST_NAME}"
-)
-add_custom_command(
-  OUTPUT ${CMAKE_BINARY_DIR}/${DIST_NAME}.tar.gz       
-  COMMENT "Compressing the archive from the distribution directory"
-  COMMAND ${CMAKE_COMMAND} -E tar cf ${DIST_NAME}.tar ${DIST_NAME}/
-  COMMAND gzip -9v ${DIST_NAME}.tar
-  COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_NAME}/
-)
-add_dependencies(dist dist-dir)
-
-##########################
-# Extra make clean files #
-##########################
-SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
-  ${CMAKE_HOME_DIRECTORY}/simgrid.jar
-)
-SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
-  ${CMAKE_BINARY_DIR}/simulation.trace
-)
-
-########
-# NOTE #
-########
-file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Testing/Notes/)
-file(WRITE ${CMAKE_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
-file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Release     : ${DIST_NAME}\n")
-file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Pipol user  : $ENV{PIPOL_USER}\n")
-file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Pipol image : $ENV{PIPOL_IMAGE}\n")
-
-#######
-# DOC #
-#######
-set(WARNING "This file is generated, don't edit it!")
-set(srcdir ${CMAKE_HOME_DIRECTORY})
-include(GenerateDoc.cmake)
index 832b832..f6b80d6 100644 (file)
@@ -23,6 +23,7 @@ static jmethodID jtask_method_Comm_constructor;
 
 static jfieldID jtask_field_Task_bind;
 static jfieldID jtask_field_Task_name;
+static jfieldID jtask_field_Task_messageSize;
 static jfieldID jtask_field_Comm_bind;
 static jfieldID jtask_field_Comm_taskBind;
 static jfieldID jtask_field_Comm_receiving;
@@ -50,6 +51,7 @@ Java_org_simgrid_msg_Task_nativeInit(JNIEnv *env, jclass cls) {
   jtask_method_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "<init>", "()V");
   jtask_field_Task_bind = jxbt_get_jfield(env, jtask_class_Task, "bind", "J");
   jtask_field_Task_name = jxbt_get_jfield(env, jtask_class_Task, "name", "Ljava/lang/String;");
+  jtask_field_Task_messageSize = jxbt_get_jfield(env, jtask_class_Task, "messageSize", "D");
   jtask_field_Comm_bind = jxbt_get_jfield(env, jtask_class_Comm, "bind", "J");
   jtask_field_Comm_taskBind = jxbt_get_jfield(env, jtask_class_Comm, "taskBind", "J");
   jtask_field_Comm_receiving = jxbt_get_jfield(env, jtask_class_Comm, "receiving", "Z");
@@ -348,6 +350,7 @@ Java_org_simgrid_msg_Task_setDataSize
     jxbt_throw_notbound(env, "task", jtask);
     return;
        }
+        (*env)->SetDoubleField(env, jtask, jtask_field_Task_messageSize, dataSize);
        MSG_task_set_data_size(task, (double) dataSize);
 }
 
index d21613c..307e3ea 100644 (file)
@@ -40,6 +40,7 @@ typedef struct s_stack_region{
   char *process_name;
   void *context;
   size_t size;
+  int block;
 }s_stack_region_t, *stack_region_t;
 
 typedef struct s_heap_equality{
@@ -50,5 +51,8 @@ typedef struct s_heap_equality{
 void heap_equality_free_voidp(void *e);
 void stack_region_free_voidp(void *s);
 
+void heap_ignore_region_free(mc_heap_ignore_region_t r);
+void heap_ignore_region_free_voidp(void *r);
+
 SG_END_DECL()
 #endif                          /* _MC_MC_H */
index 4680251..defbf5c 100644 (file)
@@ -32,6 +32,8 @@ extern char*_surf_mc_property_file; /* fixme: better location? */
 
 extern xbt_dynar_t mc_heap_comparison_ignore;
 extern xbt_dynar_t stacks_areas;
+extern void *maestro_stack_start;
+extern void *maestro_stack_end;
 
 /********************************* Global *************************************/
 void _mc_cfg_cb_reduce(const char *name, int pos);
index 70cdb6e..0cde216 100644 (file)
@@ -23,7 +23,6 @@ char *libsimgrid_path;
 void *start_data_libsimgrid, *start_bss_libsimgrid;
 void *start_data_binary, *start_bss_binary;
 void *start_text_binary;
-void *end_raw_heap;
 
 static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size);
 static void MC_region_restore(mc_mem_region_t reg);
@@ -38,6 +37,7 @@ static void print_local_variables_values(xbt_dynar_t all_variables);
 static void *get_stack_pointer(void *stack_context, void *heap);
 
 static void snapshot_stack_free(mc_snapshot_stack_t s);
+static xbt_dynar_t take_snapshot_ignore(void);
 
 static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size)
 {
@@ -107,8 +107,9 @@ void MC_init_memory_map_info(){
             start_bss_binary = reg.start_addr;
             i++;
           }
-        }else if(!memcmp(maps->regions[i].pathname, "[heap]", 6)){
-          end_raw_heap = reg.end_addr;
+        }else if(!memcmp(maps->regions[i].pathname, "[stack]", 7)){
+          maestro_stack_start = reg.start_addr;
+          maestro_stack_end = reg.end_addr;
           i++;
         }
       }
@@ -150,7 +151,6 @@ mc_snapshot_t MC_take_snapshot()
   unsigned int i = 0;
   s_map_region_t reg;
   memory_map_t maps = get_memory_map();
-  int nb_reg = 0;
   void *heap = NULL;
   size_t size = 0;
   void *start = NULL;
@@ -162,16 +162,14 @@ mc_snapshot_t MC_take_snapshot()
       if (maps->regions[i].pathname == NULL){
         if (reg.start_addr == std_heap){ // only save the std heap (and not the raw one)
           MC_snapshot_add_region(snapshot, 0, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr);
-          snapshot->heap_chunks_used = mmalloc_get_chunks_used(std_heap);
-          heap = snapshot->regions[nb_reg]->data;
-          nb_reg++;
+          snapshot->heap_bytes_used = mmalloc_get_bytes_used(std_heap);
+          heap = snapshot->regions[snapshot->num_reg - 1]->data;
         }
         i++;
       } else{ 
         if (!memcmp(basename(maps->regions[i].pathname), "libsimgrid", 10)){
           size = (char*)reg.end_addr - (char*)reg.start_addr;
           start = reg.start_addr;
-          nb_reg++;
           i++;
           reg = maps->regions[i];
           if(reg.pathname == NULL && (reg.prot & PROT_WRITE) && i < maps->mapsize){
@@ -180,13 +178,13 @@ mc_snapshot_t MC_take_snapshot()
             i++;
           }
           MC_snapshot_add_region(snapshot, 1, start, size);
-        }else if(!memcmp(maps->regions[i].pathname, "[heap]", 6)){
-          end_raw_heap = reg.end_addr;
+        }else if(!memcmp(maps->regions[i].pathname, "[stack]", 7)){
+          maestro_stack_start = reg.start_addr;
+          maestro_stack_end = reg.end_addr;
           i++;
         } else if (!memcmp(basename(maps->regions[i].pathname), basename(xbt_binary_name), strlen(basename(xbt_binary_name)))){
           size = (char*)reg.end_addr - (char*)reg.start_addr;
           start = reg.start_addr;
-          nb_reg++;
           i++;
           reg = maps->regions[i];
           if(reg.pathname == NULL && (reg.prot & PROT_WRITE) && reg.start_addr != std_heap && reg.start_addr != raw_heap && i < maps->mapsize){
@@ -204,6 +202,8 @@ mc_snapshot_t MC_take_snapshot()
     }
   }
 
+  snapshot->to_ignore = take_snapshot_ignore();
+
   if(_sg_mc_visited > 0 || strcmp(_sg_mc_property_file,""))
     snapshot->stacks = take_snapshot_stacks(&snapshot, heap);
   
@@ -235,6 +235,7 @@ void MC_free_snapshot(mc_snapshot_t snapshot)
 
   xbt_free(snapshot->regions);
   xbt_dynar_free(&(snapshot->stacks));
+  xbt_dynar_free(&(snapshot->to_ignore));
   xbt_free(snapshot);
 }
 
@@ -556,7 +557,7 @@ static xbt_strbuff_t get_local_variables_values(void *stack_context, void *heap)
                 xbt_strbuff_append(variables, to_append);
                 xbt_free(to_append);
               }else if(((long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1,variable_value_t)->value.address) > 0xffffffff) || ((long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1,variable_value_t)->value.address) < (long)start_text_binary)){
-                to_append = bprintf("%s=%d\n", current_variable->name, (int)(long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1, variable_value_t)->value.address));
+                to_append = bprintf("%s=%u\n", current_variable->name, (unsigned int)(long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1, variable_value_t)->value.address));
                 xbt_strbuff_append(variables, to_append);
                 xbt_free(to_append);
               }else{ 
@@ -632,3 +633,26 @@ void variable_value_free_voidp(void* v){
   variable_value_free((variable_value_t) * (void **)v);
 }
 
+static xbt_dynar_t take_snapshot_ignore(){
+  
+  if(mc_heap_comparison_ignore == NULL)
+    return NULL;
+
+  xbt_dynar_t cpy = xbt_dynar_new(sizeof(mc_heap_ignore_region_t), heap_ignore_region_free_voidp);
+
+  unsigned int cursor = 0;
+  mc_heap_ignore_region_t current_region;
+
+  xbt_dynar_foreach(mc_heap_comparison_ignore, cursor, current_region){
+    mc_heap_ignore_region_t new_region = NULL;
+    new_region = xbt_new0(s_mc_heap_ignore_region_t, 1);
+    new_region->address = current_region->address;
+    new_region->size = current_region->size;
+    new_region->block = current_region->block;
+    new_region->fragment = current_region->fragment;
+    xbt_dynar_push(cpy, &new_region);
+  }
+
+  return cpy;
+
+}
index 711fd83..d0b8fff 100644 (file)
@@ -12,7 +12,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, mc,
 
 static int heap_region_compare(void *d1, void *d2, size_t size);
 
-static int compare_stack(stack_region_t s1, stack_region_t s2, void *sp1, void *sp2, void *heap1, void *heap2, xbt_dynar_t equals);
 static int is_heap_equality(xbt_dynar_t equals, void *a1, void *a2);
 static size_t heap_ignore_size(void *address);
 
@@ -20,7 +19,8 @@ static void stack_region_free(stack_region_t s);
 static void heap_equality_free(heap_equality_t e);
 
 static int is_stack_ignore_variable(char *frame, char *var_name);
-static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals);
+static int compare_local_variables(char *s1, char *s2);
+static int compare_global_variables(int region_type, void *d1, void *d2);
 
 static size_t heap_ignore_size(void *address){
   unsigned int cursor = 0;
@@ -42,7 +42,7 @@ static size_t heap_ignore_size(void *address){
   return 0;
 }
 
-static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dynar_t equals){
+static int compare_global_variables(int region_type, void *d1, void *d2){
 
   unsigned int cursor = 0;
   size_t offset; 
@@ -68,7 +68,7 @@ static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dyn
             continue;
           }else{
             if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE) && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){
-              res_compare = compare_area(addr_pointed1, addr_pointed2, NULL, equals);
+              res_compare = compare_area(addr_pointed1, addr_pointed2, NULL);
               if(res_compare == 1){
                 #ifdef MC_VERBOSE
                   XBT_VERB("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
@@ -103,7 +103,7 @@ static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dyn
             continue;
           }else{
             if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE) && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){
-              res_compare = compare_area(addr_pointed1, addr_pointed2, NULL, equals);
+              res_compare = compare_area(addr_pointed1, addr_pointed2, NULL);
               if(res_compare == 1){
                 #ifdef MC_VERBOSE
                   XBT_VERB("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
@@ -225,16 +225,20 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
     #endif
   }
 
-  /* Compare number of blocks/fragments used in each heap */
-  if(s1->heap_chunks_used != s2->heap_chunks_used){
+  #ifdef MC_DEBUG
+    xbt_os_timer_start(timer);
+  #endif
+
+  /* Compare number of bytes used in each heap */
+  if(s1->heap_bytes_used != s2->heap_bytes_used){
     #ifdef MC_DEBUG
       xbt_os_timer_stop(timer);
-      mc_comp_times->chunks_used_comparison_time = xbt_os_timer_elapsed(timer);
-      XBT_DEBUG("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used);
+      mc_comp_times->bytes_used_comparison_time = xbt_os_timer_elapsed(timer);
+      XBT_DEBUG("Different number of bytes used in each heap : %zu - %zu", s1->heap_bytes_used, s2->heap_bytes_used);
       errors++;
     #else
       #ifdef MC_VERBOSE
-        XBT_VERB("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used);
+        XBT_VERB("Different number of bytes used in each heap : %zu - %zu", s1->heap_bytes_used, s2->heap_bytes_used);
       #endif
 
       xbt_os_timer_free(timer);
@@ -324,12 +328,10 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
   }
 
   /* Init heap information used in heap comparison algorithm */
-  init_heap_information((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data);
-
-  xbt_dynar_t equals = xbt_dynar_new(sizeof(heap_equality_t), heap_equality_free_voidp);
+  init_heap_information((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data, s1->to_ignore, s2->to_ignore);
 
   /* Compare binary global variables */
-  is_diff = compare_global_variables(s1->region_type[data_program_index], s1->regions[data_program_index]->data, s2->regions[data_program_index]->data, equals);
+  is_diff = compare_global_variables(s1->region_type[data_program_index], s1->regions[data_program_index]->data, s2->regions[data_program_index]->data);
   if(is_diff != 0){
     #ifdef MC_DEBUG
       xbt_os_timer_stop(timer);
@@ -353,14 +355,14 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
     #endif
   }
 
-  #ifdef MC_VERBOSE
+  #ifdef MC_DEBUG
     if(is_diff == 0)
       xbt_os_timer_stop(timer);
     xbt_os_timer_start(timer);
   #endif
 
   /* Compare libsimgrid global variables */
-    is_diff = compare_global_variables(s1->region_type[data_libsimgrid_index], s1->regions[data_libsimgrid_index]->data, s2->regions[data_libsimgrid_index]->data, equals);
+    is_diff = compare_global_variables(s1->region_type[data_libsimgrid_index], s1->regions[data_libsimgrid_index]->data, s2->regions[data_libsimgrid_index]->data);
   if(is_diff != 0){
     #ifdef MC_DEBUG
       xbt_os_timer_stop(timer);
@@ -390,11 +392,50 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
     xbt_os_timer_start(timer);
   #endif
 
+    /* Stacks comparison */
+    unsigned int  cursor = 0;
+    int diff_local = 0;
+    is_diff = 0;
+    
+    while(cursor < xbt_dynar_length(s1->stacks)){
+      diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data);
+      if(diff_local > 0){
+        #ifdef MC_DEBUG
+          if(is_diff == 0){
+            xbt_os_timer_stop(timer);
+            mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer); 
+          }
+          XBT_DEBUG("Different local variables between stacks %d", cursor + 1);
+          errors++;
+          is_diff = 1;
+        #else
+        
+          #ifdef MC_VERBOSE
+            XBT_VERB("Different local variables between stacks %d", cursor + 1);
+          #endif
+          
+            reset_heap_information();
+            xbt_os_timer_free(timer);
+            xbt_os_timer_stop(global_timer);
+            mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
+            xbt_os_timer_free(global_timer);
+            
+            if(!raw_mem)
+              MC_UNSET_RAW_MEM;
+            
+            return 1;
+        #endif
+      }
+      cursor++;
+    }
+    
+    #ifdef MC_DEBUG
+      xbt_os_timer_start(timer);
+    #endif
+
   /* Compare heap */
-  xbt_dynar_t stacks1 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
-  xbt_dynar_t stacks2 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
  
-  if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data, &stacks1, &stacks2, equals)){
+  if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data)){
 
     #ifdef MC_DEBUG
       xbt_os_timer_stop(timer);
@@ -404,14 +445,12 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
     #else
 
       xbt_os_timer_free(timer);
-      xbt_dynar_free(&stacks1);
-      xbt_dynar_free(&stacks2);
-      xbt_dynar_free(&equals);
  
       #ifdef MC_VERBOSE
         XBT_VERB("Different heap (mmalloc_compare)");
       #endif
        
+      reset_heap_information();
       xbt_os_timer_stop(global_timer);
       mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
       xbt_os_timer_free(global_timer);
@@ -427,52 +466,7 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
     #endif
   }
 
-  #ifdef MC_DEBUG
-    xbt_os_timer_start(timer);
-  #endif
-
-  /* Stacks comparison */
-  unsigned int  cursor = 0;
-  int diff_local = 0;
-  is_diff = 0;
-
-  while(cursor < xbt_dynar_length(stacks1)){
-    diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, equals);
-    if(diff_local > 0){
-      #ifdef MC_DEBUG
-        if(is_diff == 0){
-          xbt_os_timer_stop(timer);
-          mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer); 
-        }
-        XBT_DEBUG("Different local variables between stacks %d", cursor + 1);
-        errors++;
-        is_diff = 1;
-      #else
-        xbt_dynar_free(&stacks1);
-        xbt_dynar_free(&stacks2);
-        xbt_dynar_free(&equals);
-        
-      #ifdef MC_VERBOSE
-        XBT_VERB("Different local variables between stacks %d", cursor + 1);
-      #endif
-          
-        xbt_os_timer_free(timer);
-        xbt_os_timer_stop(global_timer);
-        mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
-        xbt_os_timer_free(global_timer);
-        
-        if(!raw_mem)
-          MC_UNSET_RAW_MEM;
-        
-        return 1;
-      #endif
-    }
-    cursor++;
-  }
-
-  xbt_dynar_free(&stacks1);
-  xbt_dynar_free(&stacks2);
-  xbt_dynar_free(&equals);
+  reset_heap_information();
    
   xbt_os_timer_free(timer);
 
@@ -521,7 +515,7 @@ static int is_stack_ignore_variable(char *frame, char *var_name){
   return 0;
 }
 
-static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals){
+static int compare_local_variables(char *s1, char *s2){
   
   xbt_dynar_t tokens1 = xbt_str_split(s1, NULL);
   xbt_dynar_t tokens2 = xbt_str_split(s2, NULL);
@@ -530,37 +524,47 @@ static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals){
   unsigned int cursor = 0;
   void *addr1, *addr2;
   char *ip1 = NULL, *ip2 = NULL;
-  
+  int res_compare = 0;
+
+  #ifdef MC_VERBOSE
+    char *var_name;
+  #endif
+
   while(cursor < xbt_dynar_length(tokens1)){
     s_tokens1 = xbt_str_split(xbt_dynar_get_as(tokens1, cursor, char *), "=");
     s_tokens2 = xbt_str_split(xbt_dynar_get_as(tokens2, cursor, char *), "=");
     if(xbt_dynar_length(s_tokens1) > 1 && xbt_dynar_length(s_tokens2) > 1){
+      #ifdef MC_VERBOSE
+        var_name = xbt_dynar_get_as(s_tokens1, 0, char *);
+      #endif
       if((strcmp(xbt_dynar_get_as(s_tokens1, 0, char *), "ip") == 0) && (strcmp(xbt_dynar_get_as(s_tokens2, 0, char *), "ip") == 0)){
         xbt_free(ip1);
         xbt_free(ip2);
         ip1 = strdup(xbt_dynar_get_as(s_tokens1, 1, char *));
         ip2 = strdup(xbt_dynar_get_as(s_tokens2, 1, char *));
       }
-      if(strcmp(xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *)) != 0){   
-        /* Ignore this variable ?  */
-        if(is_stack_ignore_variable(ip1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(ip2, xbt_dynar_get_as(s_tokens2, 0, char *))){
-          xbt_dynar_free(&s_tokens1);
-          xbt_dynar_free(&s_tokens2);
-          cursor++;
-          continue;
-        }
-        addr1 = (void *) strtoul(xbt_dynar_get_as(s_tokens1, 1, char *), NULL, 16);
-        addr2 = (void *) strtoul(xbt_dynar_get_as(s_tokens2, 1, char *), NULL, 16);
-        if(is_heap_equality(heap_equals, addr1, addr2) == 0){
-          if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose))
-            XBT_VERB("Variable %s is different between stacks in %s : %s - %s", xbt_dynar_get_as(s_tokens1, 0, char *), ip1, xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *));
-          xbt_dynar_free(&s_tokens1);
-          xbt_dynar_free(&s_tokens2);
-          xbt_dynar_free(&tokens1);
-          xbt_dynar_free(&tokens2);
-          xbt_free(ip1);
-          xbt_free(ip2);
-          return 1;
+      addr1 = (void *) strtoul(xbt_dynar_get_as(s_tokens1, 1, char *), NULL, 16);
+      addr2 = (void *) strtoul(xbt_dynar_get_as(s_tokens2, 1, char *), NULL, 16);
+      if(addr1 > std_heap && (char *)addr1 <= (char *)std_heap + STD_HEAP_SIZE && addr2 > std_heap && (char *)addr2 <= (char *)std_heap + STD_HEAP_SIZE){
+        res_compare = compare_area(addr1, addr2, NULL);
+        if(res_compare == 1){
+          if(is_stack_ignore_variable(ip1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(ip2, xbt_dynar_get_as(s_tokens2, 0, char *))){
+            xbt_dynar_free(&s_tokens1);
+            xbt_dynar_free(&s_tokens2);
+            cursor++;
+            continue;
+          }else {
+            #ifdef MC_VERBOSE
+              XBT_VERB("Different local variable : %s at addresses %p - %p", var_name, addr1, addr2);
+            #endif
+            xbt_dynar_free(&s_tokens1);
+            xbt_dynar_free(&s_tokens2);
+            xbt_dynar_free(&tokens1);
+            xbt_dynar_free(&tokens2);
+            xbt_free(ip1);
+            xbt_free(ip2);
+            return 1;
+          }
         }
       }
     }
@@ -606,37 +610,6 @@ static int is_heap_equality(xbt_dynar_t equals, void *a1, void *a2){
 
 }
 
-
-static int compare_stack(stack_region_t s1, stack_region_t s2, void *sp1, void *sp2, void *heap1, void *heap2, xbt_dynar_t equals){
-  
-  size_t k = 0;
-  size_t size_used1 = s1->size - ((char*)sp1 - (char*)s1->address);
-  size_t size_used2 = s2->size - ((char*)sp2 - (char*)s2->address);
-
-  int pointer_align;
-  void *addr_pointed1 = NULL, *addr_pointed2 = NULL;  
-  
-  while(k < size_used1){
-    if(memcmp((char *)s1->address + s1->size - k, (char *)s2->address + s2->size - k, 1) != 0){
-      pointer_align = ((size_used1 - k) / sizeof(void*)) * sizeof(void*);
-      addr_pointed1 = *((void **)(((char*)s1->address + (s1->size - size_used1)) + pointer_align));
-      addr_pointed2 = *((void **)(((char*)s2->address + (s2->size - size_used2)) + pointer_align));
-      if(is_heap_equality(equals, addr_pointed1, addr_pointed2) == 0){
-        if((addr_pointed1 > std_heap) && (addr_pointed1 < (void *)((char *)std_heap + STD_HEAP_SIZE)) && (addr_pointed2 > std_heap) && (addr_pointed2 < (void *)((char *)std_heap + STD_HEAP_SIZE))){
-          if(is_free_area(addr_pointed1, (xbt_mheap_t)heap1) == 0 || is_free_area(addr_pointed2, (xbt_mheap_t)heap2) == 0){
-            return 1;
-          }
-        }else{
-          return 1;
-        } 
-      }
-    } 
-    k++;
-  }
-  return 0;
-}
-
 int MC_compare_snapshots(void *s1, void *s2){
   
   MC_ignore_stack("self", "simcall_BODY_mc_snapshot");
@@ -648,7 +621,7 @@ int MC_compare_snapshots(void *s1, void *s2){
 void print_comparison_times(){
   XBT_DEBUG("*** Comparison times ***");
   XBT_DEBUG("- Nb processes : %f", mc_comp_times->nb_processes_comparison_time);
-  XBT_DEBUG("- Nb chunks used : %f", mc_comp_times->chunks_used_comparison_time);
+  XBT_DEBUG("- Nb bytes used : %f", mc_comp_times->bytes_used_comparison_time);
   XBT_DEBUG("- Stacks sizes : %f", mc_comp_times->stacks_sizes_comparison_time);
   XBT_DEBUG("- Binary global variables : %f", mc_comp_times->binary_global_variables_comparison_time);
   XBT_DEBUG("- Libsimgrid global variables : %f", mc_comp_times->libsimgrid_global_variables_comparison_time);
index c3a3383..1768a12 100644 (file)
@@ -49,14 +49,14 @@ static int is_visited_state(){
 
     if(raw_mem_set)
       MC_SET_RAW_MEM;
+
     return 0;
 
   }else{
 
     MC_SET_RAW_MEM;
     
-    size_t current_chunks_used = new_state->system_state->heap_chunks_used;
+    size_t current_bytes_used = new_state->system_state->heap_bytes_used;
 
     unsigned int cursor = 0;
     int previous_cursor = 0, next_cursor = 0;
@@ -64,38 +64,40 @@ static int is_visited_state(){
     int end = xbt_dynar_length(visited_states) - 1;
 
     mc_safety_visited_state_t state_test = NULL;
-    size_t chunks_used_test;
-    int same_chunks_not_found = 1;
+    size_t bytes_used_test;
+    int same_bytes_not_found = 1;
 
-    while(start <= end && same_chunks_not_found){
+    while(start <= end && same_bytes_not_found){
       cursor = (start + end) / 2;
       state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t);
-      chunks_used_test = state_test->system_state->heap_chunks_used;
-      if(chunks_used_test < current_chunks_used)
+      bytes_used_test = state_test->system_state->heap_bytes_used;
+      if(bytes_used_test < current_bytes_used)
         start = cursor + 1;
-      if(chunks_used_test > current_chunks_used)
+      if(bytes_used_test > current_bytes_used)
         end = cursor - 1; 
-      if(chunks_used_test == current_chunks_used){
-        same_chunks_not_found = 0;
+      if(bytes_used_test == current_bytes_used){
+        same_bytes_not_found = 0;
         if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
           xbt_dynar_remove_at(visited_states, cursor, NULL);
           xbt_dynar_insert_at(visited_states, cursor, &new_state);
+          XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num);
           if(raw_mem_set)
             MC_SET_RAW_MEM;
           else
             MC_UNSET_RAW_MEM;
           return 1;
         }else{
-          /* Search another state with same number of chunks used */
+          /* Search another state with same number of bytes used */
           previous_cursor = cursor - 1;
           while(previous_cursor >= 0){
             state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, previous_cursor, mc_safety_visited_state_t);
-            chunks_used_test = state_test->system_state->heap_chunks_used;
-            if(chunks_used_test != current_chunks_used)
+            bytes_used_test = state_test->system_state->heap_bytes_used;
+            if(bytes_used_test != current_bytes_used)
               break;
             if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
               xbt_dynar_remove_at(visited_states, previous_cursor, NULL);
               xbt_dynar_insert_at(visited_states, previous_cursor, &new_state);
+              XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num);
               if(raw_mem_set)
                 MC_SET_RAW_MEM;
               else
@@ -107,12 +109,13 @@ static int is_visited_state(){
           next_cursor = cursor + 1;
           while(next_cursor < xbt_dynar_length(visited_states)){
             state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, next_cursor, mc_safety_visited_state_t);
-            chunks_used_test = state_test->system_state->heap_chunks_used;
-            if(chunks_used_test != current_chunks_used)
+            bytes_used_test = state_test->system_state->heap_bytes_used;
+            if(bytes_used_test != current_bytes_used)
               break;
             if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
               xbt_dynar_remove_at(visited_states, next_cursor, NULL);
               xbt_dynar_insert_at(visited_states, next_cursor, &new_state);
+              XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num);
               if(raw_mem_set)
                 MC_SET_RAW_MEM;
               else
@@ -126,9 +129,9 @@ static int is_visited_state(){
     }
 
     state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t);
-    chunks_used_test = state_test->system_state->heap_chunks_used;
+    bytes_used_test = state_test->system_state->heap_bytes_used;
 
-    if(chunks_used_test < current_chunks_used)
+    if(bytes_used_test < current_bytes_used)
       xbt_dynar_insert_at(visited_states, cursor + 1, &new_state);
     else
       xbt_dynar_insert_at(visited_states, cursor, &new_state);
@@ -306,10 +309,6 @@ void MC_dpor(void)
           next_state->system_state = MC_take_snapshot();
         }
 
-      }else{
-
-        XBT_DEBUG("State already visited !");
-        
       }
 
       xbt_fifo_unshift(mc_stack_safety, next_state);
index 461e0b5..cec559a 100644 (file)
@@ -122,8 +122,6 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr);
 static dw_frame_t get_frame_by_offset(xbt_dict_t all_variables, unsigned long int offset);
 static size_t data_bss_ignore_size(void *address);
 static void MC_get_global_variables(char *elf_file);
-static void heap_ignore_region_free(mc_heap_ignore_region_t r);
-static void heap_ignore_region_free_voidp(void *r);
 
 void MC_do_the_modelcheck_for_real() {
 
@@ -191,10 +189,6 @@ void MC_init(){
   get_libsimgrid_plt_section();
   get_binary_plt_section();
 
-  MC_ignore_data_bss(&end_raw_heap, sizeof(end_raw_heap));
-  MC_ignore_data_bss(&mc_comp_times, sizeof(mc_comp_times));
-  MC_ignore_data_bss(&mc_snapshot_comparison_time, sizeof(mc_snapshot_comparison_time)); 
-
   /* Get global variables */
   MC_get_global_variables(xbt_binary_name);
   MC_get_global_variables(libsimgrid_path);
@@ -214,6 +208,9 @@ void MC_init(){
   MC_ignore_stack("next_context", "smx_ctx_sysv_suspend_serial");
   MC_ignore_stack("i", "smx_ctx_sysv_suspend_serial");
 
+  MC_ignore_data_bss(&mc_comp_times, sizeof(mc_comp_times));
+  MC_ignore_data_bss(&mc_snapshot_comparison_time, sizeof(mc_snapshot_comparison_time)); 
+
   if(raw_mem_set)
     MC_SET_RAW_MEM;
 
@@ -746,12 +743,12 @@ void MC_automaton_new_propositional_symbol(const char* id, void* fct) {
 
 /************ MC_ignore ***********/ 
 
-static void heap_ignore_region_free(mc_heap_ignore_region_t r){
+void heap_ignore_region_free(mc_heap_ignore_region_t r){
   if(r)
     xbt_free(r);
 }
 
-static void heap_ignore_region_free_voidp(void *r){
+void heap_ignore_region_free_voidp(void *r){
   heap_ignore_region_free((mc_heap_ignore_region_t) * (void **) r);
 }
 
@@ -845,12 +842,12 @@ void MC_ignore_data_bss(void *address, size_t size){
   if(mc_data_bss_comparison_ignore == NULL)
     mc_data_bss_comparison_ignore = xbt_dynar_new(sizeof(mc_data_bss_ignore_variable_t), NULL);
 
-  if(xbt_dynar_is_empty(mc_data_bss_comparison_ignore)){
+  mc_data_bss_ignore_variable_t var = NULL;
+  var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1);
+  var->address = address;
+  var->size = size;
 
-    mc_data_bss_ignore_variable_t var = NULL;
-    var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1);
-    var->address = address;
-    var->size = size;
+  if(xbt_dynar_is_empty(mc_data_bss_comparison_ignore)){
 
     xbt_dynar_insert_at(mc_data_bss_comparison_ignore, 0, &var);
 
@@ -875,11 +872,6 @@ void MC_ignore_data_bss(void *address, size_t size){
       if(current_var->address > address)
         end = cursor - 1;
     }
-    mc_data_bss_ignore_variable_t var = NULL;
-    var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1);
-    var->address = address;
-    var->size = size;
 
     if(current_var->address < address)
       xbt_dynar_insert_at(mc_data_bss_comparison_ignore, cursor + 1, &var);
@@ -888,6 +880,34 @@ void MC_ignore_data_bss(void *address, size_t size){
 
   }
 
+  /* Remove variable from mc_global_variables */
+
+  if(mc_global_variables != NULL){
+
+    unsigned int cursor = 0;
+    int start = 0;
+    int end = xbt_dynar_length(mc_global_variables) - 1;
+    global_variable_t current_var;
+    int var_found;
+
+    while(start <= end){
+      cursor = (start + end) / 2;
+      current_var = (global_variable_t)xbt_dynar_get_as(mc_global_variables, cursor, global_variable_t);
+      if(current_var->address == var->address){
+        var_found = 1;
+        break;
+      }
+      if(current_var->address < address)
+        start = cursor + 1;
+      if(current_var->address > address)
+        end = cursor - 1;
+    }
+
+    if(var_found)
+      xbt_dynar_remove_at(mc_global_variables, cursor, NULL);
+    
+  }
+
   MC_UNSET_RAW_MEM;
 
   if(raw_mem_set)
@@ -999,6 +1019,7 @@ void MC_new_stack_area(void *stack, char *name, void* context, size_t size){
   region->process_name = strdup(name);
   region->context = context;
   region->size = size;
+  region->block = ((char*)stack - (char*)((xbt_mheap_t)std_heap)->heapbase) / BLOCKSIZE + 1;
   xbt_dynar_push(stacks_areas, &region);
   
   MC_UNSET_RAW_MEM;
@@ -1515,13 +1536,13 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
       }else if(strcmp(tok2, "DW_OP_fbreg:") == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_fbregister_op;
-        new_element->location.fbreg_op = atoi(xbt_dynar_get_as(tokens2, 1, char*));
+        new_element->location.fbreg_op = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*));
         xbt_dynar_push(loc->location.compose, &new_element);
       }else if(strncmp(tok2, "DW_OP_breg", 10) == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_bregister_op;
         new_element->location.breg_op.reg = atoi(strtok(tok2, "DW_OP_breg"));
-        new_element->location.breg_op.offset = atoi(xbt_dynar_get_as(tokens2, 1, char*));
+        new_element->location.breg_op.offset = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*));
         xbt_dynar_push(loc->location.compose, &new_element);
       }else if(strncmp(tok2, "DW_OP_lit", 9) == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
@@ -1531,7 +1552,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
       }else if(strcmp(tok2, "DW_OP_piece:") == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_piece;
-        new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, 1, char*));
+        new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*));
         /*if(strlen(xbt_dynar_get_as(tokens2, 1, char*)) > 1)
           new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, 1, char*));
         else
@@ -1540,7 +1561,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
       }else if(strcmp(tok2, "DW_OP_plus_uconst:") == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_plus_uconst;
-        new_element->location.plus_uconst = atoi(xbt_dynar_get_as(tokens2, 1, char *));
+        new_element->location.plus_uconst = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char *));
         xbt_dynar_push(loc->location.compose, &new_element);
       }else if(strcmp(tok, "DW_OP_abs") == 0 || 
                strcmp(tok, "DW_OP_and") == 0 ||
@@ -1560,7 +1581,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
       }else if(strcmp(tok2, "DW_OP_deref_size:") == 0){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_deref;
-        new_element->location.deref_size = (unsigned int short) atoi(xbt_dynar_get_as(tokens2, 1, char*));
+        new_element->location.deref_size = (unsigned int short) atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*));
         /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1)
           new_element->location.deref_size = atoi(xbt_dynar_get_as(tokens, cursor, char*));
         else
@@ -1575,7 +1596,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_uconstant;
         new_element->location.uconstant.bytes = 1;
-        new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*)));
+        new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)));
         /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1)
           new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens, cursor, char*)));
         else
@@ -1585,7 +1606,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_sconstant;
         new_element->location.sconstant.bytes = 1;
-        new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*)));
+        new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)));
         xbt_dynar_push(loc->location.compose, &new_element);
       }else if(strcmp(tok2, "DW_OP_const1u:") == 0 ||
                strcmp(tok2, "DW_OP_const2u:") == 0 ||
@@ -1594,7 +1615,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_uconstant;
         new_element->location.uconstant.bytes = tok2[11] - '0';
-        new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*)));
+        new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)));
         /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1)
           new_element->location.constant.value = atoi(xbt_dynar_get_as(tokens, cursor, char*));
         else
@@ -1607,7 +1628,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
         new_element->type = e_dw_sconstant;
         new_element->location.sconstant.bytes = tok2[11] - '0';
-        new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*)));
+        new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)));
         xbt_dynar_push(loc->location.compose, &new_element);
       }else{
         dw_location_t new_element = xbt_new0(s_dw_location_t, 1);
@@ -1801,7 +1822,6 @@ static void MC_get_global_variables(char *elf_file){
        || (strcmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), ".data") == 0)
        || (strcmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), ".bss") == 0)
        || (strncmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), "stderr", 6) == 0)
-       || (strncmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), "counter", 7) == 0)
        || ((size_t)strtoul(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 2, char*), NULL, 16) == 0))
       continue;
 
@@ -1817,10 +1837,34 @@ static void MC_get_global_variables(char *elf_file){
     var->size = (size_t)strtoul(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 2, char*), NULL, 16);
     var->name = strdup(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*));
 
-    if(data_bss_ignore_size(var->address) > 0)
+    if(data_bss_ignore_size(var->address) > 0){
       global_variable_free(var);
-    else
-      xbt_dynar_push(mc_global_variables, &var);
+    }else{
+      if(xbt_dynar_is_empty(mc_global_variables)){
+        xbt_dynar_push(mc_global_variables, &var);
+      }else{
+        unsigned int cursor = 0;
+        int start = 0;
+        int end = xbt_dynar_length(mc_global_variables) - 1;
+        global_variable_t current_var = NULL;
+      
+        while(start <= end){
+          cursor = (start + end) / 2;
+          current_var = (global_variable_t)xbt_dynar_get_as(mc_global_variables, cursor, global_variable_t);
+          if(current_var->address == var->address)
+            break;
+          if(current_var->address < var->address)
+            start = cursor + 1;
+          if(current_var->address > var->address)
+            end = cursor - 1;
+        }
+        if(current_var->address < var->address)
+          xbt_dynar_insert_at(mc_global_variables, cursor + 1, &var);
+        else
+          xbt_dynar_insert_at(mc_global_variables, cursor, &var);
+      }
+    }
 
     xbt_dynar_free(&line_tokens);
 
index 8067a73..8f2dadc 100644 (file)
@@ -476,9 +476,11 @@ void MC_ddfs(int search_cycle){
    
         /* Debug information */
        
-        req_str = MC_request_to_string(req, value);
-        XBT_DEBUG("Execute: %s", req_str);
-        xbt_free(req_str);
+        if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){
+          req_str = MC_request_to_string(req, value);
+          XBT_DEBUG("Execute: %s", req_str);
+          xbt_free(req_str);
+        }
 
         MC_state_set_executed_request(current_pair->graph_state, req, value);   
 
index bf29aa9..df27cd0 100644 (file)
@@ -36,11 +36,12 @@ typedef struct s_mc_mem_region{
 typedef struct s_mc_snapshot{
   unsigned int num_reg;
   int region_type[nb_regions];
-  size_t heap_chunks_used;
+  size_t heap_bytes_used;
   mc_mem_region_t *regions;
   size_t *stack_sizes;
   xbt_dynar_t stacks;
   int nb_processes;
+  xbt_dynar_t to_ignore;
 } s_mc_snapshot_t, *mc_snapshot_t;
 
 typedef struct s_mc_snapshot_stack{
@@ -200,7 +201,6 @@ void get_libsimgrid_plt_section(void);
 void get_binary_plt_section(void);
 
 extern void *start_data_libsimgrid;
-extern void *end_raw_heap;
 extern void *start_data_binary;
 extern void *start_bss_binary;
 extern char *libsimgrid_path;
@@ -219,7 +219,7 @@ extern void *end_got_plt_binary;
 
 typedef struct s_mc_comparison_times{
   double nb_processes_comparison_time;
-  double chunks_used_comparison_time;
+  double bytes_used_comparison_time;
   double stacks_sizes_comparison_time;
   double binary_global_variables_comparison_time;
   double libsimgrid_global_variables_comparison_time;
index ec0af0b..8e1cded 100644 (file)
@@ -1259,8 +1259,8 @@ char *dax_text;
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -1269,7 +1269,7 @@ char *dax_text;
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
@@ -1302,10 +1302,7 @@ char *dax_text;
  */
 
 /* Version strings. */
-const char rcs_dax__flexml_skeleton[] =
- "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $";
-const char rcs_dax__flexml[] =
- "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $";
+const char dax__flexml_version[] = "1.9.6";
 
 /* ANSI headers. */
 #include <stdlib.h> /* for realloc() -- needed here when using flex 2.5.4 */
index e1d69e7..e7b83a4 100644 (file)
@@ -2,8 +2,8 @@
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -12,7 +12,7 @@
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
index 148b4d4..338f799 100644 (file)
@@ -40,18 +40,15 @@ void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge,
                                  seq_par_t seq_or_par);
 xbt_dynar_t SD_dotload_generic(const char * filename);
 
-static double dot_parse_double(const char *string)
-{
+static double dot_parse_double(const char *string) {
   if (string == NULL)
     return -1;
   double value = -1;
   char *err;
 
-  //ret = sscanf(string, "%lg", &value);
   errno = 0;
   value = strtod(string,&err);
-  if(errno)
-  {
+  if(errno) {
     XBT_WARN("Failed to convert string to double: %s\n",strerror(errno));
     return -1;
   }
@@ -59,8 +56,7 @@ static double dot_parse_double(const char *string)
 }
 
 
-static int dot_parse_int(const char *string)
-{
+static int dot_parse_int(const char *string) {
   if (string == NULL)
     return -10;
   int ret = 0;
@@ -80,8 +76,7 @@ static SD_task_t root_task, end_task;
 static Agraph_t *dag_dot;
 static bool schedule = true;
 
-static void dump_res()
-{
+static void dump_res() {
   unsigned int cursor;
   SD_task_t task;
   xbt_dynar_foreach(result, cursor, task) {
@@ -91,20 +86,18 @@ static void dump_res()
 }
 
 
-static void dot_task_free(void *task)
-{
+static void dot_task_free(void *task) {
   SD_task_t t = task;
   SD_task_destroy(t);
 }
 
-static void dot_task_p_free(void *task)
-{
+static void dot_task_p_free(void *task) {
   SD_task_t *t = task;
   SD_task_destroy(*t);
 }
 
-static void TRACE_sd_dotloader (SD_task_t task, const char *category)
-{
+#ifdef HAVE_TRACING
+static void TRACE_sd_dotloader (SD_task_t task, const char *category) {
   if (category && strlen (category)){
     if (task->category)
       XBT_DEBUG("Change the category of %s from %s to %s",
@@ -115,6 +108,7 @@ static void TRACE_sd_dotloader (SD_task_t task, const char *category)
     TRACE_sd_set_task_category(task, category);
   }
 }
+#endif
 
 /** @brief loads a DOT file describing a DAG
  * 
@@ -125,8 +119,7 @@ static void TRACE_sd_dotloader (SD_task_t task, const char *category)
  * (the amount of data transfer in bit).
  * if they aren't here, there choose to be equal to zero.
  */
-xbt_dynar_t SD_dotload(const char *filename)
-{
+xbt_dynar_t SD_dotload(const char *filename) {
   SD_dotload_generic(filename);
   xbt_dynar_t computer = NULL;
   xbt_dict_cursor_t dict_cursor;
@@ -138,7 +131,7 @@ xbt_dynar_t SD_dotload(const char *filename)
   return result;
 }
 
-xbt_dynar_t SD_dotload_with_sched(const char *filename){
+xbt_dynar_t SD_dotload_with_sched(const char *filename) {
   SD_dotload_generic(filename);
 
   if(schedule == true){
@@ -152,8 +145,8 @@ xbt_dynar_t SD_dotload_with_sched(const char *filename){
       SD_task_t task;
       SD_task_t task_previous = NULL;
       xbt_dynar_foreach(computer,count,task){
-        // add dependency between the previous and the task to avoid
-        // parallel execution
+        /* add dependency between the previous and the task to avoid
+         * parallel execution */
         if(task != NULL ){
           if(task_previous != NULL &&
              !SD_task_dependency_exists(task_previous, task))
@@ -187,8 +180,7 @@ xbt_dynar_t SD_dotload_with_sched(const char *filename){
   return NULL;
 }
 
-xbt_dynar_t SD_PTG_dotload(const char * filename)
-{
+xbt_dynar_t SD_PTG_dotload(const char * filename) {
   xbt_assert(filename, "Unable to use a null file descriptor\n");
   FILE *in_file = fopen(filename, "r");
   dag_dot = agread(in_file, NIL(Agdisc_t *));
@@ -207,16 +199,20 @@ xbt_dynar_t SD_PTG_dotload(const char * filename)
   xbt_dict_set(jobs, "end", end_task, NULL);
 
   Agnode_t *dag_node = NULL;
-  for (dag_node = agfstnode(dag_dot); dag_node; dag_node = agnxtnode(dag_dot, dag_node)) {
+  for (dag_node = agfstnode(dag_dot); dag_node; dag_node = agnxtnode(dag_dot,
+      dag_node)) {
     dot_add_parallel_task(dag_node);
   }
   agclose(dag_dot);
   xbt_dict_free(&jobs);
 
   /* And now, post-process the files.
-   * We want a file task per pair of computation tasks exchanging the file. Duplicate on need
-   * Files not produced in the system are said to be produced by root task (top of DAG).
-   * Files not consumed in the system are said to be consumed by end task (bottom of DAG).
+   * We want a file task per pair of computation tasks exchanging the file.
+   * Duplicate on need
+   * Files not produced in the system are said to be produced by root task
+   * (top of DAG).
+   * Files not consumed in the system are said to be consumed by end task
+   * (bottom of DAG).
    */
   xbt_dict_cursor_t cursor;
   SD_task_t file;
@@ -236,7 +232,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename)
     } else if (xbt_dynar_is_empty(file->tasks_after)) {
       xbt_dynar_foreach(file->tasks_before, cpt2, depbefore) {
         SD_task_t newfile =
-            SD_task_create_comm_par_mxn_1d_block(file->name, NULL, file->amount);
+            SD_task_create_comm_par_mxn_1d_block(file->name, NULL,
+                file->amount);
         SD_task_dependency_add(NULL, NULL, depbefore->src, newfile);
         SD_task_dependency_add(NULL, NULL, newfile, end_task);
         xbt_dynar_push(result, &newfile);
@@ -250,7 +247,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename)
                  file->name, depbefore->src->name);
           }
           newfile =
-              SD_task_create_comm_par_mxn_1d_block(file->name, NULL, file->amount);
+              SD_task_create_comm_par_mxn_1d_block(file->name, NULL,
+                  file->amount);
           SD_task_dependency_add(NULL, NULL, depbefore->src, newfile);
           SD_task_dependency_add(NULL, NULL, newfile, depafter->dst);
           xbt_dynar_push(result, &newfile);
@@ -276,10 +274,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename)
 }
 
 
-xbt_dynar_t SD_dotload_generic(const char * filename)
-{
+xbt_dynar_t SD_dotload_generic(const char * filename) {
   xbt_assert(filename, "Unable to use a null file descriptor\n");
-  //dag_dot =  agopen((char*)filename,Agstrictdirected,0);
   FILE *in_file = fopen(filename, "r");
   dag_dot = agread(in_file, NIL(Agdisc_t *));
 
@@ -304,15 +300,18 @@ xbt_dynar_t SD_dotload_generic(const char * filename)
   xbt_dict_free(&jobs);
 
   /* And now, post-process the files.
-   * We want a file task per pair of computation tasks exchanging the file. Duplicate on need
-   * Files not produced in the system are said to be produced by root task (top of DAG).
-   * Files not consumed in the system are said to be consumed by end task (bottom of DAG).
+   * We want a file task per pair of computation tasks exchanging the file.
+   * Duplicate on need
+   * Files not produced in the system are said to be produced by root task
+   * (top of DAG).
+   * Files not consumed in the system are said to be consumed by end task
+   * (bottom of DAG).
    */
   xbt_dict_cursor_t cursor;
   SD_task_t file;
   char *name;
   xbt_dict_foreach(files, cursor, name, file) {
-    XBT_DEBUG("Considering file '%s' stored in the dictionnary",
+    XBT_DEBUG("Considering file '%s' stored in the dictionary",
         file->name);
     if (xbt_dynar_is_empty(file->tasks_before)) {
       XBT_DEBUG("file '%s' has no source. Add dependency from 'root'",
@@ -343,8 +342,7 @@ xbt_dynar_t SD_dotload_generic(const char * filename)
 /* dot_add_parallel_task create a sd_task of SD_TASK_COMP_PAR_AMDHAL type and
  * all transfers required for this task. The execution time of the task is
  * given by the attribute size. The unit of size is the Flop.*/
-void dot_add_parallel_task(Agnode_t * dag_node)
-{
+void dot_add_parallel_task(Agnode_t * dag_node) {
   char *name = agnameof(dag_node);
   SD_task_t current_job;
   double amount = dot_parse_double(agget(dag_node, (char *) "size"));
@@ -356,12 +354,21 @@ void dot_add_parallel_task(Agnode_t * dag_node)
   XBT_DEBUG("See <job id=%s amount=%s %.0f alpha=%.2f>", name,
         agget(dag_node, (char *) "size"), amount, alpha);
   if (!strcmp(name, "root")){
-    XBT_WARN("'root' node is explicitly declared in the DOT file. Ignore it");
-    return;
+    XBT_WARN("'root' node is explicitly declared in the DOT file. Update it");
+    root_task->amount = amount;
+    root_task->alpha = alpha;
+#ifdef HAVE_TRACING
+    TRACE_sd_dotloader (root_task, agget (dag_node, (char*)"category"));
+#endif
   }
+
   if (!strcmp(name, "end")){
-    XBT_WARN("'end' node is explicitly declared in the DOT file. Ignore it");
-    return;
+    XBT_WARN("'end' node is explicitly declared in the DOT file. Update it");
+    end_task->amount = amount;
+    end_task->alpha = alpha;
+#ifdef HAVE_TRACING
+    TRACE_sd_dotloader (end_task, agget (dag_node, (char*)"category"));
+#endif
   }
 
   current_job = xbt_dict_get_or_null(jobs, name);
@@ -397,8 +404,7 @@ void dot_add_parallel_task(Agnode_t * dag_node)
 /* dot_add_task create a sd_task and all transfers required for this
  * task. The execution time of the task is given by the attribute size.
  * The unit of size is the Flop.*/
-void dot_add_task(Agnode_t * dag_node)
-{
+void dot_add_task(Agnode_t * dag_node) {
   char *name = agnameof(dag_node);
   SD_task_t current_job;
   double runtime = dot_parse_double(agget(dag_node, (char *) "size"));
@@ -454,51 +460,52 @@ void dot_add_task(Agnode_t * dag_node)
   if(schedule || XBT_LOG_ISENABLED(sd_dotparse, xbt_log_priority_verbose)){
     /* try to take the information to schedule the task only if all is
      * right*/
-    // performer is the computer which execute the task
+    /* performer is the computer which execute the task */
     unsigned long performer = -1;
     char * char_performer = agget(dag_node, (char *) "performer");
     if (char_performer != NULL)
       performer = (long) dot_parse_int(char_performer);
 
-    // order is giving the task order on one computer
+    /* order is giving the task order on one computer */
     unsigned long order = -1;
     char * char_order = agget(dag_node, (char *) "order");
     if (char_order != NULL)
       order = (long) dot_parse_int(char_order);
     xbt_dynar_t computer = NULL;
-    //XBT_INFO("performer = %d, order=%d",performer,order);
     if(performer != -1 && order != -1){
-      //necessary parameters are given
+      /* required parameters are given */
       computer = xbt_dict_get_or_null(computers, char_performer);
       if(computer == NULL){
         computer = xbt_dynar_new(sizeof(SD_task_t), NULL);
         xbt_dict_set(computers, char_performer, computer, NULL);
       }
       if(performer < xbt_lib_length(host_lib)){
-        // the  wanted computer is available
+        /* the wanted computer is available */
         SD_task_t *task_test = NULL;
         if(order < computer->used)
           task_test = xbt_dynar_get_ptr(computer,order);
         if(task_test != NULL && *task_test != NULL && *task_test != current_job){
-          /*the user gives the same order to several tasks*/
+          /* the user gives the same order to several tasks */
           schedule = false;
           XBT_VERB("The task %s starts on the computer %s at the position : %s like the task %s",
-                 (*task_test)->name, char_performer, char_order, current_job->name);
+                 (*task_test)->name, char_performer, char_order,
+                 current_job->name);
         }else{
-          //the parameter seems to be ok
+          /* the parameter seems to be ok */
           xbt_dynar_set_as(computer, order, SD_task_t, current_job);
         }
       }else{
-        /*the platform has not enough processors to schedule the DAG like
-        *the user wants*/
+        /* the platform has not enough processors to schedule the DAG like
+         * the user wants*/
         schedule = false;
         XBT_VERB("The schedule is ignored, there are not enough computers");
       }
     }
     else {
-      //one of necessary parameters are not given
+      /* one of required parameters is not given */
       schedule = false;
-      XBT_VERB("The schedule is ignored, the task %s is not correctly scheduled", current_job->name);
+      XBT_VERB("The schedule is ignored, the task %s is not correctly scheduled",
+          current_job->name);
     }
   }
 }
@@ -508,8 +515,7 @@ void dot_add_task(Agnode_t * dag_node)
  * The amount of data transfers is given by the attribute size on the
  * edge. */
 void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge,
-                                seq_par_t seq_or_par)
-{
+                                seq_par_t seq_or_par) {
   SD_task_t file = NULL;
   char *name_tail=agnameof(agtail(edge));
   char *name_head=agnameof(aghead(edge));
@@ -554,7 +560,7 @@ void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge,
  * The amount of data transfers is given by the attribute size on the
  * edge. */
 void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge,
-                                 seq_par_t seq_or_par){
+                                 seq_par_t seq_or_par) {
   SD_task_t file;
   char *name_tail=agnameof(agtail(edge));
   char *name_head=agnameof(aghead(edge));
index aaa090f..601bf8e 100644 (file)
   inline static SIMCALL_FUNC_RETURN_TYPE(RES) simcall_BODY_##NAME(MAP(SIMCALL_ARG, ##__VA_ARGS__)) { \
     smx_process_t self = SIMIX_process_self(); \
     self->simcall.call = TYPE; \
-    memset(self->simcall.args, 0, sizeof(self->simcall.args));  \
+    memset(&self->simcall.result, 0, sizeof(self->simcall.result)); \
+    memset(self->simcall.args, 0, sizeof(self->simcall.args)); \
     MAP_WITH_DEFAULT_ARGS(SIMCALL_INIT_FIELD, (), ##__VA_ARGS__) \
     if (self != simix_global->maestro_process) { \
       XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name, \
index 8431291..a17362e 100644 (file)
@@ -14,6 +14,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_replay,smpi,"Trace Replay with SMPI");
 
 int communicator_size = 0;
 static int active_processes = 0;
+xbt_dynar_t *reqq;
 
 static void log_timed_action (const char *const *action, double clock){
   if (XBT_LOG_ISENABLED(smpi_replay, xbt_log_priority_verbose)){
@@ -23,11 +24,13 @@ static void log_timed_action (const char *const *action, double clock){
   }
 }
 
+
 typedef struct {
   xbt_dynar_t isends; /* of MPI_Request */
   xbt_dynar_t irecvs; /* of MPI_Request */
 } s_smpi_replay_globals_t, *smpi_replay_globals_t;
 
+
 /* Helper function */
 static double parse_double(const char *string)
 {
@@ -41,17 +44,27 @@ static double parse_double(const char *string)
 
 static void action_init(const char *const *action)
 {
+  int i;
   XBT_DEBUG("Initialize the counters");
   smpi_replay_globals_t globals =  xbt_new(s_smpi_replay_globals_t, 1);
   globals->isends = xbt_dynar_new(sizeof(MPI_Request),NULL);
   globals->irecvs = xbt_dynar_new(sizeof(MPI_Request),NULL);
-
+  
+  
   smpi_process_set_user_data((void*) globals);
 
   /* start a simulated timer */
   smpi_process_simulated_start();
   /*initialize the number of active processes */
   active_processes = smpi_process_count();
+
+  reqq=xbt_new0(xbt_dynar_t,active_processes);
+  
+  for(i=0;i<active_processes;i++){
+    reqq[i]=xbt_dynar_new(sizeof(MPI_Request),NULL);
+  }
+    
+  
 }
 
 static void action_finalize(const char *const *action)
@@ -127,6 +140,7 @@ static void action_Isend(const char *const *action)
   int to = atoi(action[2]);
   double size=parse_double(action[3]);
   double clock = smpi_process_simulated_elapsed();
+  MPI_Request request;
   smpi_replay_globals_t globals =
      (smpi_replay_globals_t) smpi_process_get_user_data();
 #ifdef HAVE_TRACING
@@ -137,8 +151,8 @@ static void action_Isend(const char *const *action)
   TRACE_smpi_send(rank, rank, dst_traced);
 #endif
 
-  MPI_Request request = smpi_mpi_isend(NULL, size, MPI_BYTE, to, 0,
-                                       MPI_COMM_WORLD);
+  request = smpi_mpi_isend(NULL, size, MPI_BYTE, to, 0,MPI_COMM_WORLD);
+  
 #ifdef HAVE_TRACING
   TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
   request->send = 1;
@@ -146,6 +160,7 @@ static void action_Isend(const char *const *action)
 #endif
 
   xbt_dynar_push(globals->isends,&request);
+  xbt_dynar_push(reqq[smpi_comm_rank(MPI_COMM_WORLD)],&request);
 
   log_timed_action (action, clock);
 }
@@ -190,11 +205,13 @@ static void action_Irecv(const char *const *action)
 #endif
 
   request = smpi_mpi_irecv(NULL, size, MPI_BYTE, from, 0, MPI_COMM_WORLD);
+  
 #ifdef HAVE_TRACING
   TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
   request->recv = 1;
 #endif
   xbt_dynar_push(globals->irecvs,&request);
+  xbt_dynar_push(reqq[smpi_comm_rank(MPI_COMM_WORLD)],&request);
 
   log_timed_action (action, clock);
 }
@@ -236,7 +253,75 @@ static void action_wait(const char *const *action){
 
 static void action_waitall(const char *const *action){
   double clock = smpi_process_simulated_elapsed();
-//  smpi_mpi_waitall(count, requests, status);
+  int count_requests=0;
+  unsigned int i=0;
+
+  count_requests=xbt_dynar_length(reqq[smpi_comm_rank(MPI_COMM_WORLD)]);
+
+  if (count_requests>0) {
+    MPI_Request requests[count_requests];
+    MPI_Status status[count_requests];
+  
+    /*  The reqq is an array of dynars. Its index corresponds to the rank.
+     Thus each rank saves its own requests to the array request. */
+    xbt_dynar_foreach(reqq[smpi_comm_rank(MPI_COMM_WORLD)],i,requests[i]); 
+    
+  #ifdef HAVE_TRACING
+   //save information from requests
+   xbt_dynar_t srcs = xbt_dynar_new(sizeof(int), NULL);
+   xbt_dynar_t dsts = xbt_dynar_new(sizeof(int), NULL);
+   xbt_dynar_t recvs = xbt_dynar_new(sizeof(int), NULL);
+   for (i = 0; i < count_requests; i++) {
+    if(requests[i]){
+      int *asrc = xbt_new(int, 1);
+      int *adst = xbt_new(int, 1);
+      int *arecv = xbt_new(int, 1);
+      *asrc = requests[i]->src;
+      *adst = requests[i]->dst;
+      *arecv = requests[i]->recv;
+      xbt_dynar_insert_at(srcs, i, asrc);
+      xbt_dynar_insert_at(dsts, i, adst);
+      xbt_dynar_insert_at(recvs, i, arecv);
+      xbt_free(asrc);
+      xbt_free(adst);
+      xbt_free(arecv);
+    }else {
+      int *t = xbt_new(int, 1);
+      xbt_dynar_insert_at(srcs, i, t);
+      xbt_dynar_insert_at(dsts, i, t);
+      xbt_dynar_insert_at(recvs, i, t);
+      xbt_free(t);
+    }
+   }
+   int rank_traced = smpi_process_index();
+   TRACE_smpi_computing_out(rank_traced);
+
+   TRACE_smpi_ptp_in(rank_traced, -1, -1, __FUNCTION__);
+  #endif
+
+    smpi_mpi_waitall(count_requests, requests, status);
+
+  #ifdef HAVE_TRACING
+   for (i = 0; i < count_requests; i++) {
+    int src_traced, dst_traced, is_wait_for_receive;
+    xbt_dynar_get_cpy(srcs, i, &src_traced);
+    xbt_dynar_get_cpy(dsts, i, &dst_traced);
+    xbt_dynar_get_cpy(recvs, i, &is_wait_for_receive);
+    if (is_wait_for_receive) {
+      TRACE_smpi_recv(rank_traced, src_traced, dst_traced);
+    }
+   }
+   TRACE_smpi_ptp_out(rank_traced, -1, -1, __FUNCTION__);
+   //clean-up of dynars
+   xbt_dynar_free(&srcs);
+   xbt_dynar_free(&dsts);
+   xbt_dynar_free(&recvs);
+   TRACE_smpi_computing_in(rank_traced);
+  #endif
+   
+   xbt_dynar_reset(reqq[smpi_comm_rank(MPI_COMM_WORLD)]);
+  }
   log_timed_action (action, clock);
 }
 
@@ -317,9 +402,12 @@ static void action_allReduce(const char *const *action) {
 
 static void action_allToAll(const char *const *action) {
   double clock = smpi_process_simulated_elapsed();
-  double comm_size = smpi_comm_size(MPI_COMM_WORLD);
-  double send_size = parse_double(action[2]);
-  double recv_size = parse_double(action[3]);
+  int comm_size = smpi_comm_size(MPI_COMM_WORLD);
+  int send_size = atoi(action[2]);
+  int recv_size = atoi(action[3]);
+  void *send = xbt_new0(int, send_size*comm_size);  
+  void *recv = xbt_new0(int, send_size*comm_size);
+
 
 #ifdef HAVE_TRACING
   int rank = smpi_process_index();
@@ -328,16 +416,17 @@ static void action_allToAll(const char *const *action) {
 #endif
 
   if (send_size < 200 && comm_size > 12) {
-    smpi_coll_tuned_alltoall_bruck(NULL, send_size, MPI_BYTE,
-                                   NULL, recv_size, MPI_BYTE,
+    smpi_coll_tuned_alltoall_bruck(send, send_size, MPI_BYTE,
+                                   recv, recv_size, MPI_BYTE,
                                    MPI_COMM_WORLD);
   } else if (send_size < 3000) {
-    smpi_coll_tuned_alltoall_basic_linear(NULL, send_size, MPI_BYTE,
-                                          NULL, recv_size, MPI_BYTE,
+  
+    smpi_coll_tuned_alltoall_basic_linear(send, send_size, MPI_BYTE,
+                                          recv, recv_size, MPI_BYTE,
                                           MPI_COMM_WORLD);
   } else {
-    smpi_coll_tuned_alltoall_pairwise(NULL, send_size, MPI_BYTE,
-                                      NULL, recv_size, MPI_BYTE,
+    smpi_coll_tuned_alltoall_pairwise(send, send_size, MPI_BYTE,
+                                      recv, recv_size, MPI_BYTE,
                                       MPI_COMM_WORLD);
   }
 
@@ -347,12 +436,21 @@ static void action_allToAll(const char *const *action) {
 #endif
 
   log_timed_action (action, clock);
+  xbt_free(send);
+  xbt_free(recv);
 }
 
 static void action_allToAllv(const char *const *action) {
   double clock = smpi_process_simulated_elapsed();
+//  int comm_size = smpi_comm_size(MPI_COMM_WORLD);
+
+//  PMPI_Alltoallv(NULL, send_size, send_disp,
+//                   MPI_BYTE, NULL, recv_size,
+//                   recv_disp, MPI_BYTE, MPI_COMM_WORLD);
 
+   
   log_timed_action (action, clock);
+  
 }
 
 void smpi_replay_init(int *argc, char***argv){
@@ -386,10 +484,10 @@ int smpi_replay_finalize(){
   double sim_time= 1.;
   /* One active process will stop. Decrease the counter*/
   active_processes--;
-
   if(!active_processes){
     /* Last process alive speaking */
     /* end the simulated timer */
+    xbt_dynar_free(reqq);
     sim_time = smpi_process_simulated_elapsed();
     XBT_INFO("Simulation time %g", sim_time);
     _xbt_replay_action_exit();
index 931756b..c069682 100644 (file)
@@ -4356,8 +4356,8 @@ char *surf_parse_text;
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -4366,7 +4366,7 @@ char *surf_parse_text;
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
@@ -4399,10 +4399,7 @@ char *surf_parse_text;
  */
 
 /* Version strings. */
-const char rcs_surfxml_flexml_skeleton[] =
- "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $";
-const char rcs_surfxml_flexml[] =
- "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $";
+const char surfxml_flexml_version[] = "1.9.6";
 
 /* ANSI headers. */
 #include <stdlib.h> /* for realloc() -- needed here when using flex 2.5.4 */
index 9581d79..0f5a9e4 100644 (file)
@@ -1057,8 +1057,8 @@ char *xbt_graph_parse_text;
  *
  * This program was generated with the FleXML XML processor generator.
  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2011 Martin Quinson.  All rights reserved.
- * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp).
+ * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
+ * (1.9.6).
  * 
  * There are two, intertwined parts to this program, part A and part B.
  *
@@ -1067,7 +1067,7 @@ char *xbt_graph_parse_text;
  * 
  * Some parts, here collectively called "Part A", are found in the 
  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved.
+ * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
  *
  * You can redistribute, use, perform, display and/or modify "Part A"
  * provided the following two conditions hold:
@@ -1100,10 +1100,7 @@ char *xbt_graph_parse_text;
  */
 
 /* Version strings. */
-const char rcs_graphxml_flexml_skeleton[] =
- "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $";
-const char rcs_graphxml_flexml[] =
- "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $";
+const char graphxml_flexml_version[] = "1.9.6";
 
 /* ANSI headers. */
 #include <stdlib.h> /* for realloc() -- needed here when using flex 2.5.4 */
index 2aa4c8e..8c67d8d 100644 (file)
@@ -15,6 +15,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mm_diff, xbt,
 
 xbt_dynar_t mc_heap_comparison_ignore;
 xbt_dynar_t stacks_areas;
+void *maestro_stack_start, *maestro_stack_end;
 
 static void heap_area_pair_free(heap_area_pair_t pair);
 static void heap_area_pair_free_voidp(void *d);
@@ -22,11 +23,13 @@ static int add_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, int b
 static int is_new_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, int block2, int fragment2);
 static heap_area_t new_heap_area(int block, int fragment);
 
-static size_t heap_comparison_ignore_size(void *address);
+static size_t heap_comparison_ignore_size(xbt_dynar_t list, void *address);
 static void add_heap_equality(xbt_dynar_t equals, void *a1, void *a2);
 static void remove_heap_equality(xbt_dynar_t equals, int address, void *a);
 
-static char* is_stack(void *address);
+static int is_stack(void *address);
+static int is_block_stack(int block);
+static int equal_blocks(int b1, int b2);
 
 void mmalloc_backtrace_block_display(void* heapinfo, int block){
 
@@ -112,10 +115,11 @@ void mmalloc_backtrace_display(void *addr){
 void *s_heap = NULL, *heapbase1 = NULL, *heapbase2 = NULL;
 malloc_info *heapinfo1 = NULL, *heapinfo2 = NULL;
 size_t heaplimit = 0, heapsize1 = 0, heapsize2 = 0;
+xbt_dynar_t to_ignore1 = NULL, to_ignore2 = NULL;
 
-int ignore_done = 0;
+int ignore_done1 = 0, ignore_done2 = 0;
 
-void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2){
+void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t i1, xbt_dynar_t i2){
 
   heaplimit = ((struct mdesc *)heap1)->heaplimit;
 
@@ -129,10 +133,26 @@ void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2){
 
   heapsize1 = heap1->heapsize;
   heapsize2 = heap2->heapsize;
+
+  to_ignore1 = i1;
+  to_ignore2 = i2;
+
+  if(MC_is_active()){
+    MC_ignore_data_bss(&heaplimit, sizeof(heaplimit));
+    MC_ignore_data_bss(&s_heap, sizeof(s_heap));
+    MC_ignore_data_bss(&heapbase1, sizeof(heapbase1));
+    MC_ignore_data_bss(&heapbase2, sizeof(heapbase2));
+    MC_ignore_data_bss(&heapinfo1, sizeof(heapinfo1));
+    MC_ignore_data_bss(&heapinfo2, sizeof(heapinfo2));
+    MC_ignore_data_bss(&heapsize1, sizeof(heapsize1));
+    MC_ignore_data_bss(&heapsize2, sizeof(heapsize2));
+    MC_ignore_data_bss(&to_ignore1, sizeof(to_ignore1));
+    MC_ignore_data_bss(&to_ignore2, sizeof(to_ignore2));
+  }
   
 }
 
-int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stack1, xbt_dynar_t *stack2, xbt_dynar_t equals){
+int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){
 
   if(heap1 == NULL && heap1 == NULL){
     XBT_DEBUG("Malloc descriptors null");
@@ -149,14 +169,12 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
   size_t current_block = -1;    /* avoid "maybe uninitialized" warning */
   size_t current_fragment;
   void *addr_block1, *addr_block2, *addr_frag1, *addr_frag2;
-  void *snap_addr_block1, *snap_addr_block2;
-  char *stack_name;
   int nb_diff1 = 0, nb_diff2 = 0;
 
   xbt_dynar_t previous = xbt_dynar_new(sizeof(heap_area_pair_t), heap_area_pair_free_voidp);
 
   int equal, res_compare = 0;
-
+  
   /* Check busy blocks*/
 
   i1 = 1;
@@ -171,17 +189,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
     }
 
     addr_block1 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-    snap_addr_block1 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)heapbase1));
 
     if(heapinfo1[i1].type == 0){  /* Large block */
       
-      if((xbt_dynar_length(*stack1) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block1)) != NULL)){
-        stack_region_t stack = xbt_new0(s_stack_region_t, 1);
-        stack->address = snap_addr_block1;
-        stack->process_name = strdup(stack_name);
-        stack->size = heapinfo1[i1].busy_block.busy_size;
-        xbt_dynar_push(*stack1, &stack);
-        res_compare = -1;
+      if(is_stack(addr_block1)){
+        for(k=0; k < heapinfo1[i1].busy_block.size; k++)
+          heapinfo1[i1+k].busy_block.equal_to = new_heap_area(i1, -1);
+        for(k=0; k < heapinfo2[i1].busy_block.size; k++)
+          heapinfo2[i1+k].busy_block.equal_to = new_heap_area(i1, -1);
+        i1 = i1 + heapinfo1[current_block].busy_block.size;
+        continue;
       }
 
       if(heapinfo1[i1].busy_block.equal_to != NULL){
@@ -199,26 +216,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
         if(heapinfo2[current_block].busy_block.equal_to == NULL){  
         
           addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-          snap_addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)heapbase2));
-          
-          if((xbt_dynar_length(*stack2) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block2)) != NULL)){
-            stack_region_t stack = xbt_new0(s_stack_region_t, 1);
-            stack->address = snap_addr_block2;
-            stack->process_name = strdup(stack_name);
-            stack->size = heapinfo2[current_block].busy_block.busy_size;
-            xbt_dynar_push(*stack2, &stack);
-            res_compare = -1;
-          }
         
-          res_compare = compare_area(addr_block1, addr_block2, previous, equals);
+          res_compare = compare_area(addr_block1, addr_block2, previous);
         
-          if(res_compare == 0 || res_compare == -1){
+          if(res_compare == 0){
             for(k=1; k < heapinfo2[current_block].busy_block.size; k++)
               heapinfo2[current_block+k].busy_block.equal_to = new_heap_area(i1, -1);
             for(k=1; k < heapinfo1[current_block].busy_block.size; k++)
               heapinfo1[current_block+k].busy_block.equal_to = new_heap_area(i1, -1);
             equal = 1;
-            match_equals(previous, equals);
+            match_equals(previous);
             i1 = i1 + heapinfo1[current_block].busy_block.size;
           }
         
@@ -231,16 +238,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
       while(i2 <= heaplimit && !equal){
 
         addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));        
-        snap_addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)heapbase2));
-        
-        if((xbt_dynar_length(*stack2) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block2)) != NULL)){
-          stack_region_t stack = xbt_new0(s_stack_region_t, 1);
-          stack->address = snap_addr_block2;
-          stack->process_name = strdup(stack_name);
-          stack->size = heapinfo2[i2].busy_block.busy_size;
-          xbt_dynar_push(*stack2, &stack);
-          res_compare = -1;
-        }
            
         if(i2 == current_block){
           i2++;
@@ -257,15 +254,15 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
           continue;
         }
         
-        res_compare = compare_area(addr_block1, addr_block2, previous, equals);
+        res_compare = compare_area(addr_block1, addr_block2, previous);
         
-        if(res_compare == 0 || res_compare == -1){
+        if(res_compare == 0){
           for(k=1; k < heapinfo2[i2].busy_block.size; k++)
             heapinfo2[i2+k].busy_block.equal_to = new_heap_area(i1, -1);
           for(k=1; k < heapinfo1[i1].busy_block.size; k++)
             heapinfo1[i1+k].busy_block.equal_to = new_heap_area(i2, -1);
           equal = 1;
-          match_equals(previous, equals);
+          match_equals(previous);
           i1 = i1 + heapinfo1[i1].busy_block.size;
         }
 
@@ -276,7 +273,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
       }
 
       if(!equal){
-        XBT_DEBUG("Block %zu not found (size_used = %zu)", i1, heapinfo1[i1].busy_block.busy_size);
+        XBT_DEBUG("Block %zu not found (size_used = %zu, addr = %p)", i1, heapinfo1[i1].busy_block.busy_size, addr_block1);
         i1 = heaplimit + 1;
         nb_diff1++;
       }
@@ -306,11 +303,11 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
             addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
             addr_frag2 = (void*) ((char *)addr_block2 + (current_fragment << ((xbt_mheap_t)s_heap)->heapinfo[current_block].type));
 
-            res_compare = compare_area(addr_frag1, addr_frag2, previous, equals);
+            res_compare = compare_area(addr_frag1, addr_frag2, previous);
 
             if(res_compare == 0){
               equal = 1;
-              match_equals(previous, equals);
+              match_equals(previous);
             }
         
             xbt_dynar_reset(previous);
@@ -332,16 +329,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
               continue;
 
             if(heapinfo2[i2].busy_frag.equal_to[j2] != NULL)                
-              continue;              
+              continue;            
                           
             addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
             addr_frag2 = (void*) ((char *)addr_block2 + (j2 << ((xbt_mheap_t)s_heap)->heapinfo[i2].type));
 
-            res_compare = compare_area(addr_frag1, addr_frag2, previous, equals);
+            res_compare = compare_area(addr_frag1, addr_frag2, previous);
             
             if(res_compare == 0){
               equal = 1;
-              match_equals(previous, equals);
+              match_equals(previous);
               xbt_dynar_reset(previous);
               break;
             }
@@ -355,7 +352,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
         }
 
         if(heapinfo1[i1].busy_frag.equal_to[j1] == NULL){
-          XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %d)", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1]);
+          XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %d, address = %p)", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1], addr_frag1);
           i2 = heaplimit + 1;
           i1 = heaplimit + 1;
           nb_diff1++;
@@ -412,6 +409,9 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
     i++; 
   }
 
+  if(current_block == heaplimit)
+    XBT_DEBUG("Number of blocks/fragments not found in heap1 : %d", nb_diff1);
+
   i = 1;
 
   while(i<=heaplimit){
@@ -428,8 +428,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
           }
         }
       }
-      xbt_free(heapinfo2[i].busy_block.equal_to);
-      heapinfo2[i].busy_block.equal_to = NULL;
     }
     if(heapinfo2[i].type > 0){
       addr_block2 = ((void*) (((ADDR2UINT(i)) - 1) * BLOCKSIZE + (char*)heapbase2));
@@ -446,6 +444,46 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
             }
           }
         }
+      }
+    }
+    i++; 
+  }
+
+  if(current_block == heaplimit)
+    XBT_DEBUG("Number of blocks/fragments not found in heap2 : %d", nb_diff2);
+
+  xbt_dynar_free(&previous);
+
+  return ((nb_diff1 > 0) || (nb_diff2 > 0));
+}
+
+void reset_heap_information(){
+
+  size_t i = 0, j;
+
+  while(i<=heaplimit){
+    if(heapinfo1[i].type == 0){
+      xbt_free(heapinfo1[i].busy_block.equal_to);
+      heapinfo1[i].busy_block.equal_to = NULL;
+    }
+    if(heapinfo1[i].type > 0){
+      for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo1[i].type); j++){
+        xbt_free(heapinfo1[i].busy_frag.equal_to[j]);
+        heapinfo1[i].busy_frag.equal_to[j] = NULL;
+      }
+    }
+    i++; 
+  }
+
+  i = 0;
+
+  while(i<=heaplimit){
+    if(heapinfo2[i].type == 0){
+      xbt_free(heapinfo2[i].busy_block.equal_to);
+      heapinfo2[i].busy_block.equal_to = NULL;
+    }
+    if(heapinfo2[i].type > 0){
+      for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo2[i].type); j++){
         xbt_free(heapinfo2[i].busy_frag.equal_to[j]);
         heapinfo2[i].busy_frag.equal_to[j] = NULL;
       }
@@ -453,13 +491,12 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac
     i++; 
   }
 
-  xbt_dynar_free(&previous);
-  ignore_done = 0;
+  ignore_done1 = 0, ignore_done2 = 0;
   s_heap = NULL, heapbase1 = NULL, heapbase2 = NULL;
   heapinfo1 = NULL, heapinfo2 = NULL;
   heaplimit = 0, heapsize1 = 0, heapsize2 = 0;
+  to_ignore1 = NULL, to_ignore2 = NULL;
 
-  return ((nb_diff1 > 0) || (nb_diff2 > 0));
 }
 
 static heap_area_t new_heap_area(int block, int fragment){
@@ -471,16 +508,16 @@ static heap_area_t new_heap_area(int block, int fragment){
 }
 
 
-static size_t heap_comparison_ignore_size(void *address){
+static size_t heap_comparison_ignore_size(xbt_dynar_t ignore_list, void *address){
 
   unsigned int cursor = 0;
   int start = 0;
-  int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1;
+  int end = xbt_dynar_length(ignore_list) - 1;
   mc_heap_ignore_region_t region;
 
   while(start <= end){
     cursor = (start + end) / 2;
-    region = (mc_heap_ignore_region_t)xbt_dynar_get_as(mc_heap_comparison_ignore, cursor, mc_heap_ignore_region_t);
+    region = (mc_heap_ignore_region_t)xbt_dynar_get_as(ignore_list, cursor, mc_heap_ignore_region_t);
     if(region->address == address)
       return region->size;
     if(region->address < address)
@@ -493,10 +530,10 @@ static size_t heap_comparison_ignore_size(void *address){
 }
 
 
-int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equals){
+int compare_area(void *area1, void* area2, xbt_dynar_t previous){
 
   size_t i = 0, pointer_align = 0, ignore1 = 0, ignore2 = 0;
-  void *address_pointed1, *address_pointed2;
+  void *addr_pointed1, *addr_pointed2;
   int res_compare;
   size_t block1, frag1, block2, frag2, size;
   int check_ignore = 0;
@@ -514,6 +551,9 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
   block1 = ((char*)area1 - (char*)((xbt_mheap_t)s_heap)->heapbase) / BLOCKSIZE + 1;
   block2 = ((char*)area2 - (char*)((xbt_mheap_t)s_heap)->heapbase) / BLOCKSIZE + 1;
 
+  if(is_block_stack((int)block1) && is_block_stack((int)block2))
+    return 0;
+
   if(((char *)area1 < (char*)((xbt_mheap_t)s_heap)->heapbase)  || (block1 > heapsize1) || (block1 < 1) || ((char *)area2 < (char*)((xbt_mheap_t)s_heap)->heapbase) || (block2 > heapsize2) || (block2 < 1))
     return 1;
 
@@ -525,6 +565,11 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
     if(heapinfo1[block1].type == -1){
       return 0;
     }else if(heapinfo1[block1].type == 0){
+      if(heapinfo1[block1].busy_block.equal_to != NULL){
+        if(equal_blocks(block1, block2)){
+          return 0;
+        }
+      }
       if(heapinfo1[block1].busy_block.size != heapinfo2[block2].busy_block.size)
         return 1;
       if(heapinfo1[block1].busy_block.busy_size != heapinfo2[block2].busy_block.busy_size)
@@ -539,7 +584,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
       area1_to_compare = addr_block1;
       area2_to_compare = addr_block2;
 
-      if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_block.ignore == 1)
+      if(heapinfo1[block1].busy_block.ignore == 1 || heapinfo2[block2].busy_block.ignore == 1)
         check_ignore = 1;
     }else{
       frag1 = ((uintptr_t) (ADDR2UINT (area1) % (BLOCKSIZE))) >> heapinfo1[block1].type;
@@ -560,8 +605,8 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
 
       if(size == 0)
         return 0;
-
-      if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_frag.ignore[frag1] == 1)
+      
+      if(heapinfo1[block1].busy_frag.ignore[frag1] == 1 || heapinfo2[block2].busy_frag.ignore[frag2] == 1)
         check_ignore = 1;
     }
   }else if((heapinfo1[block1].type > 0) && (heapinfo2[block2].type > 0)){
@@ -584,7 +629,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
     if(size == 0)
       return 0;
 
-    if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_frag.ignore[frag1] == 1)
+    if(heapinfo1[block1].busy_frag.ignore[frag1] == 1 || heapinfo2[block2].busy_frag.ignore[frag2] == 1)
       check_ignore = 1;   
   }else{
     return 1;
@@ -592,12 +637,12 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
   
   while(i<size){
 
-    if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && check_ignore){
-
-      if((ignore1 = heap_comparison_ignore_size((char *)area1 + i)) > 0){
-        if((ignore2 = heap_comparison_ignore_size((char *)area2 + i))  == ignore1){
+    if(check_ignore){
+      if((ignore_done1 < xbt_dynar_length(to_ignore1)) && ((ignore1 = heap_comparison_ignore_size(to_ignore1, (char *)area1 + i)) > 0)){
+        if((ignore_done2 < xbt_dynar_length(to_ignore2)) && ((ignore2 = heap_comparison_ignore_size(to_ignore2, (char *)area2 + i))  == ignore1)){
           i = i + ignore2;
-          ignore_done++;
+          ignore_done1++;
+          ignore_done2++;
           continue;
         }
       }
@@ -607,14 +652,19 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
 
       /* Check pointer difference */
       pointer_align = (i / sizeof(void*)) * sizeof(void*);
-      address_pointed1 = *((void **)((char *)area1_to_compare + pointer_align));
-      address_pointed2 = *((void **)((char *)area2_to_compare + pointer_align));
+      addr_pointed1 = *((void **)((char *)area1_to_compare + pointer_align));
+      addr_pointed2 = *((void **)((char *)area2_to_compare + pointer_align));
+      
+      if(addr_pointed1 > maestro_stack_start && addr_pointed1 < maestro_stack_end && addr_pointed2 > maestro_stack_start && addr_pointed2 < maestro_stack_end){
+        i = pointer_align + sizeof(void *);
+        continue;
+      }
 
-      res_compare = compare_area(address_pointed1, address_pointed2, previous, equals);
+      res_compare = compare_area(addr_pointed1, addr_pointed2, previous);
       
       if(res_compare == 1)
         return 1; 
-
+      
       i = pointer_align + sizeof(void *);
       
     }else{
@@ -625,7 +675,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ
   }
 
   if(match_pairs)
-    match_equals(previous, equals);
+    match_equals(previous);
 
   return 0;
   
@@ -675,66 +725,46 @@ static int is_new_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, in
   return 1;
 }
 
-void match_equals(xbt_dynar_t list, xbt_dynar_t equals){
+void match_equals(xbt_dynar_t list){
 
   unsigned int cursor = 0;
   heap_area_pair_t current_pair;
   heap_area_t previous_area;
 
-  void *real_addr_block1, *real_addr_block2, *real_addr_frag1, *real_addr_frag2;
-
   xbt_dynar_foreach(list, cursor, current_pair){
 
     if(current_pair->fragment1 != -1){
-
-      real_addr_block1 = ((void*) (((ADDR2UINT((size_t)current_pair->block1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-      real_addr_frag1 = (void*) ((char *)real_addr_block1 + (current_pair->fragment1 << heapinfo1[current_pair->block1].type));
-      real_addr_block2 = ((void*) (((ADDR2UINT((size_t)current_pair->block2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-      real_addr_frag2 = (void*) ((char *)real_addr_block2 + (current_pair->fragment2 << heapinfo2[current_pair->block2].type));
-
+      
       if(heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] != NULL){    
-        remove_heap_equality(equals, 1, real_addr_frag1);
         previous_area = heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1];
         xbt_free(heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
         heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL;
         xbt_free(previous_area); 
       }
       if(heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2] != NULL){        
-        remove_heap_equality(equals, 2, real_addr_frag2); 
         previous_area = heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2];
         xbt_free(heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
         heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL;
         xbt_free(previous_area);
       }
-      
-      if(real_addr_frag1 != real_addr_frag2)
-        add_heap_equality(equals, real_addr_frag1, real_addr_frag2);
 
       heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] = new_heap_area(current_pair->block2, current_pair->fragment2);
       heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2] = new_heap_area(current_pair->block1, current_pair->fragment1);
 
     }else{
 
-      real_addr_block1 = ((void*) (((ADDR2UINT((size_t)current_pair->block1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-      real_addr_block2 = ((void*) (((ADDR2UINT((size_t)current_pair->block2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase));
-
       if(heapinfo1[current_pair->block1].busy_block.equal_to != NULL){
-        remove_heap_equality(equals, 1, real_addr_block1);
         previous_area = heapinfo1[current_pair->block1].busy_block.equal_to;
         xbt_free(heapinfo2[previous_area->block].busy_block.equal_to);
         heapinfo2[previous_area->block].busy_block.equal_to = NULL; 
         xbt_free(previous_area);
       }
       if(heapinfo2[current_pair->block2].busy_block.equal_to != NULL){
-        remove_heap_equality(equals, 2, real_addr_block2);
         previous_area = heapinfo2[current_pair->block2].busy_block.equal_to;
         xbt_free(heapinfo1[previous_area->block].busy_block.equal_to);
         heapinfo1[previous_area->block].busy_block.equal_to = NULL;
         xbt_free(previous_area);
       }
-      
-      if(real_addr_block1 != real_addr_block2)
-        add_heap_equality(equals, real_addr_block1, real_addr_block2);
 
       heapinfo1[current_pair->block1].busy_block.equal_to = new_heap_area(current_pair->block2, current_pair->fragment2);
       heapinfo2[current_pair->block2].busy_block.equal_to = new_heap_area(current_pair->block1, current_pair->fragment1);
@@ -873,16 +903,28 @@ int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){
   
 }
 
-static char* is_stack(void *address){
+static int is_stack(void *address){
   unsigned int cursor = 0;
   stack_region_t stack;
 
   xbt_dynar_foreach(stacks_areas, cursor, stack){
     if(address == stack->address)
-      return stack->process_name;
+      return 1;
   }
 
-  return NULL;
+  return 0;
+}
+
+static int is_block_stack(int block){
+  unsigned int cursor = 0;
+  stack_region_t stack;
+
+  xbt_dynar_foreach(stacks_areas, cursor, stack){
+    if(block == stack->block)
+      return 1;
+  }
+
+  return 0;
 }
 
 static void add_heap_equality(xbt_dynar_t equals, void *a1, void *a2){
@@ -1001,7 +1043,15 @@ int is_free_area(void *area, xbt_mheap_t heap){
   }
 
   return 0;
-  
-
+}
 
+static int equal_blocks(b1, b2){
+  if(heapinfo1[b1].busy_block.equal_to != NULL){
+    if(heapinfo2[b2].busy_block.equal_to != NULL){
+      if(((heap_area_t)(heapinfo1[b1].busy_block.equal_to))->block == b2 && ((heap_area_t)(heapinfo2[b2].busy_block.equal_to))->block == b1)
+        return 1;
+    }
+  }
+  return 0;
 }
index 07cbe7e..0dfd027 100644 (file)
@@ -344,6 +344,24 @@ void mmalloc_postexit(void)
   xbt_mheap_destroy_no_free(__mmalloc_default_mdp);
 }
 
-size_t mmalloc_get_chunks_used(xbt_mheap_t heap){
-  return ((struct mdesc *)heap)->heapstats.chunks_used;
+size_t mmalloc_get_bytes_used(xbt_mheap_t heap){
+  int i = 0, j = 0;
+  int bytes = 0;
+  
+  while(i<=((struct mdesc *)heap)->heaplimit){
+    if(((struct mdesc *)heap)->heapinfo[i].type == 0){
+      if(((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size > 0)
+        bytes += ((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size;
+     
+    }else if(((struct mdesc *)heap)->heapinfo[i].type > 0){
+      for(j=0; j < (size_t) (BLOCKSIZE >> ((struct mdesc *)heap)->heapinfo[i].type); j++){
+        if(((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j] > 0)
+          bytes += ((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j];
+      }
+    }
+    i++; 
+  }
+
+  return bytes;
 }
+