From ad5141788b986c8d0ae77612ad85e17dc1abb603 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Tue, 4 Nov 2014 15:07:12 +0100 Subject: [PATCH 1/1] replace xbt_dynar_member by xbt_dynar_search_or_negative in this test. There is a weird bug with xbt_dynar_member on some systems. When an exception is raised, backtracking mechanism of libc6 can cause segfaults (and valgrind complains quite a lot, even on systems where it does not crash) Is this related to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735090 ? example obtained stack Invalid read of size 4 at 0x476E383: backtrace (backtrace.c:141) by 0x43DC03B: xbt_backtrace_current (backtrace_linux.c:84) by 0x43DB200: xbt_dynar_search (dynar.c:474) by 0x43DB31F: xbt_dynar_member (dynar.c:511) by 0x80494A3: test_launcher (host_on_off_processes.c:35) by 0x43C889E: smx_ctx_sysv_wrapper (smx_context_sysv.c:187) by 0x46B2BDA: makecontext (makecontext.S:87) As functionality is the same, using the exception-less version of xbt_dynar_member should avoid the problem, until we find out more about it --- .../host_on_off_processes.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/teshsuite/msg/host_on_off_processes/host_on_off_processes.c b/teshsuite/msg/host_on_off_processes/host_on_off_processes.c index cb48a8a970..8c136170a0 100644 --- a/teshsuite/msg/host_on_off_processes/host_on_off_processes.c +++ b/teshsuite/msg/host_on_off_processes/host_on_off_processes.c @@ -32,7 +32,7 @@ int test_launcher(int argc, char *argv[]) test = 1; // Create a process running a simple task on a host and turn the host off during the execution of the process. - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 1:"); XBT_INFO(" Create a process on Jupiter"); argvF = xbt_new(char*, 2); @@ -47,7 +47,7 @@ int test_launcher(int argc, char *argv[]) test = 2; // Create a process that on a host that is turned off (this should not be possible) - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 2:"); XBT_INFO(" Turn off Jupiter"); // adsein: Jupiter is already, hence nothing should happen @@ -69,7 +69,7 @@ int test_launcher(int argc, char *argv[]) test = 3; // Create a process running sucessive sleeps on a host and turn the host off during the execution of the process. - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 3:"); MSG_host_on(jupiter); argvF = xbt_new(char*, 2); @@ -84,7 +84,7 @@ int test_launcher(int argc, char *argv[]) } test = 4; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 4 (turn off src during a communication) : Create a Process/task to make a communication between Jupiter and Tremblay and turn off Jupiter during the communication"); MSG_host_on(jupiter); MSG_process_sleep(10); @@ -102,7 +102,7 @@ int test_launcher(int argc, char *argv[]) } test = 5; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 5 (turn off dest during a communication : Create a Process/task to make a communication between Tremblay and Jupiter and turn off Jupiter during the communication"); MSG_host_on(jupiter); MSG_process_sleep(10); @@ -120,7 +120,7 @@ int test_launcher(int argc, char *argv[]) } test =6; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ XBT_INFO("Test 6: Turn on Jupiter, assign a VM on Jupiter, launch a process inside the VM, and turn off the node"); // Create VM0 @@ -155,17 +155,17 @@ int test_launcher(int argc, char *argv[]) } test = 7; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ } test = 8; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ } test = 9; - if (xbt_dynar_member(tests, &test)){ + if (xbt_dynar_search_or_negative(tests, &test)!=-1){ } XBT_INFO(" Test done. See you!"); -- 2.20.1