pmem / libpmemobj-cpp

C++ bindings & containers for libpmemobj
https://pmem.io
Other
108 stars 76 forks source link

intermittent helgrind test failure #179

Open szyrom opened 5 years ago

szyrom commented 5 years ago

It happend on Travis, once (TYPE=normal OS=ubuntu OS_VER=18.04 PUSH_IMAGE=1)

PKG_CONFIG_PATH=/opt/pmdk/lib/pkgconfig/ \
CC=gcc CXX=g++ \
cmake .. -DDEVELOPER_MODE=1 \
        -DCMAKE_BUILD_TYPE=Debug \
        -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
        -DTRACE_TESTS=1 \
        -DCOVERAGE=$COVERAGE
make -j2
test_command tests_gcc_debug

 45/150 Test  #38: cond_var_posix_0_helgrind ....................***Failed    5.46 sec
Running with expanded trace output on.
/libpmemobj-cpp/tests/cond_var_posix/cond_var_posix_0.cmake(32):  include(/libpmemobj-cpp/tests/cond_var_posix/../helpers.cmake )
/libpmemobj-cpp/tests/helpers.cmake(32):  set(DIR /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind )
/libpmemobj-cpp/tests/helpers.cmake(34):  function(setup )
/libpmemobj-cpp/tests/helpers.cmake(41):  function(print_logs )
/libpmemobj-cpp/tests/helpers.cmake(58):  function(finish )
/libpmemobj-cpp/tests/helpers.cmake(72):  function(match log_file match_file )
/libpmemobj-cpp/tests/helpers.cmake(83):  function(check_file_exists file )
/libpmemobj-cpp/tests/helpers.cmake(99):  function(valgrind_ignore_warnings valgrind_log )
/libpmemobj-cpp/tests/helpers.cmake(114):  function(execute_common expect_success output_file name )
/libpmemobj-cpp/tests/helpers.cmake(213):  function(check_target name )
/libpmemobj-cpp/tests/helpers.cmake(221):  function(execute_with_output out name )
/libpmemobj-cpp/tests/helpers.cmake(228):  function(execute_ignore_output name )
/libpmemobj-cpp/tests/helpers.cmake(238):  function(execute name )
/libpmemobj-cpp/tests/helpers.cmake(249):  function(pmreorder_create_store_log pool name )
/libpmemobj-cpp/tests/helpers.cmake(292):  function(pmreorder_execute expect_success engine conf_file name )
/libpmemobj-cpp/tests/cond_var_posix/cond_var_posix_0.cmake(34):  setup()
/libpmemobj-cpp/tests/helpers.cmake(35):  execute_process(COMMAND /usr/bin/cmake -E remove_directory /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind )
/libpmemobj-cpp/tests/helpers.cmake(36):  execute_process(COMMAND /usr/bin/cmake -E make_directory /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind )
/libpmemobj-cpp/tests/helpers.cmake(37):  execute_process(COMMAND /usr/bin/cmake -E remove_directory /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind )
/libpmemobj-cpp/tests/helpers.cmake(38):  execute_process(COMMAND /usr/bin/cmake -E make_directory /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind )
/libpmemobj-cpp/tests/cond_var_posix/cond_var_posix_0.cmake(36):  execute(/libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile )
/libpmemobj-cpp/tests/helpers.cmake(239):  check_target(/libpmemobj-cpp/build/tests/cond_var_posix )
/libpmemobj-cpp/tests/helpers.cmake(214):  if(NOT EXISTS /libpmemobj-cpp/build/tests/cond_var_posix )
/libpmemobj-cpp/tests/helpers.cmake(241):  execute_common(true helgrind_0 /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile )
/libpmemobj-cpp/tests/helpers.cmake(115):  if(TESTS_USE_FORCED_PMEM )
/libpmemobj-cpp/tests/helpers.cmake(119):  if(helgrind STREQUAL pmemcheck )
/libpmemobj-cpp/tests/helpers.cmake(125):  elseif(helgrind STREQUAL memcheck )
/libpmemobj-cpp/tests/helpers.cmake(128):  elseif(helgrind STREQUAL helgrind )
/libpmemobj-cpp/tests/helpers.cmake(129):  set(TRACE valgrind --error-exitcode=99 --tool=helgrind )
/libpmemobj-cpp/tests/helpers.cmake(138):  if(NOT  )
/libpmemobj-cpp/tests/helpers.cmake(144):  string(REPLACE ;   TRACE_STR valgrind;--error-exitcode=99;--tool=helgrind )
/libpmemobj-cpp/tests/helpers.cmake(145):  message(STATUS Executing: valgrind --error-exitcode=99 --tool=helgrind /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile )
-- Executing: valgrind --error-exitcode=99 --tool=helgrind /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile
/libpmemobj-cpp/tests/helpers.cmake(147):  set(cmd valgrind;--error-exitcode=99;--tool=helgrind /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile )
/libpmemobj-cpp/tests/helpers.cmake(149):  if( )
/libpmemobj-cpp/tests/helpers.cmake(164):  if(helgrind_0 STREQUAL none )
/libpmemobj-cpp/tests/helpers.cmake(168):  else()
/libpmemobj-cpp/tests/helpers.cmake(169):  execute_process(COMMAND valgrind;--error-exitcode=99;--tool=helgrind;/libpmemobj-cpp/build/tests/cond_var_posix;/libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile RESULT_VARIABLE res OUTPUT_FILE /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.out ERROR_FILE /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.err )
/libpmemobj-cpp/tests/helpers.cmake(179):  if(EXISTS /libpmemobj-cpp/tests/cond_var_posix/cond_var_posix_0_helgrind.err.match )
/libpmemobj-cpp/tests/helpers.cmake(184):  else()
/libpmemobj-cpp/tests/helpers.cmake(185):  if(helgrind STREQUAL pmemcheck )
/libpmemobj-cpp/tests/helpers.cmake(197):  if(res AND expect_success )
/libpmemobj-cpp/tests/helpers.cmake(198):  print_logs()
/libpmemobj-cpp/tests/helpers.cmake(42):  message(STATUS Test cond_var_posix_0_helgrind: )
-- Test cond_var_posix_0_helgrind:
/libpmemobj-cpp/tests/helpers.cmake(43):  if(EXISTS /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.out )
/libpmemobj-cpp/tests/helpers.cmake(44):  file(READ /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.out OUT )
/libpmemobj-cpp/tests/helpers.cmake(45):  message(STATUS Stdout:
Signal 6, backtrace:
0: /libpmemobj-cpp/build/tests/cond_var_posix(test_dump_backtrace+0x2f) [0x110cff]
1: /libpmemobj-cpp/build/tests/cond_var_posix(test_sighandler+0x1c) [0x110dcc]
2: /lib/x86_64-linux-gnu/libc.so.6(+0x3ef1f) [0x5882f1f]
3: /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xc7) [0x5882e97]
4: /lib/x86_64-linux-gnu/libc.so.6(abort+0x140) [0x5884800]
5: /libpmemobj-cpp/build/tests/cond_var_posix(+0x2c5d) [0x10ac5d]
6: /libpmemobj-cpp/build/tests/cond_var_posix(+0x4d36) [0x10cd36]
7: /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so(+0xa9e1) [0x4c369e1]
8: /lib/x86_64-linux-gnu/libpthread.so.0(+0x76da) [0x50886da]
9: /lib/x86_64-linux-gnu/libc.so.6(clone+0x3e) [0x596588e]
 )
-- Stdout:
Signal 6, backtrace:
0: /libpmemobj-cpp/build/tests/cond_var_posix(test_dump_backtrace+0x2f) [0x110cff]
1: /libpmemobj-cpp/build/tests/cond_var_posix(test_sighandler+0x1c) [0x110dcc]
2: /lib/x86_64-linux-gnu/libc.so.6(+0x3ef1f) [0x5882f1f]
3: /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xc7) [0x5882e97]
4: /lib/x86_64-linux-gnu/libc.so.6(abort+0x140) [0x5884800]
5: /libpmemobj-cpp/build/tests/cond_var_posix(+0x2c5d) [0x10ac5d]
6: /libpmemobj-cpp/build/tests/cond_var_posix(+0x4d36) [0x10cd36]
7: /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so(+0xa9e1) [0x4c369e1]
8: /lib/x86_64-linux-gnu/libpthread.so.0(+0x76da) [0x50886da]
9: /lib/x86_64-linux-gnu/libc.so.6(clone+0x3e) [0x596588e]
/libpmemobj-cpp/tests/helpers.cmake(47):  if(EXISTS /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.err )
/libpmemobj-cpp/tests/helpers.cmake(48):  file(READ /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.err ERR )
/libpmemobj-cpp/tests/helpers.cmake(49):  message(STATUS Stderr:
==11089== Helgrind, a thread error detector
==11089== Copyright (C) 2007-2017, and GNU GPL'd, by OpenWorks LLP et al.
==11089== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==11089== Command: /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile
==11089== 
/libpmemobj-cpp/tests/cond_var_posix/cond_var_posix.cpp:194 reader_mutex_until - assertion failure: diff < epsilon
==11089== ---Thread-Announcement------------------------------------------
==11089== 
==11089== Thread #1502 was created
==11089==    at 0x596587E: clone (clone.S:71)
==11089==    by 0x5088EC4: create_thread (createthread.c:100)
==11089==    by 0x5088EC4: pthread_create@@GLIBC_2.2.5 (pthread_create.c:797)
==11089==    by 0x4C367ED: pthread_create_WRK (hg_intercepts.c:427)
==11089==    by 0x4C378DF: pthread_create@* (hg_intercepts.c:460)
==11089==    by 0x10B8AF: void (anonymous namespace)::mutex_test<void* (*)(void*), void* (*)(void*)>(pmem::obj::pool<(anonymous namespace)::root>&, bool, bool, void* (*)(void*), void* (*)(void*)) [clone .constprop.53] (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x10B0E1: main (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089== 
==11089== ----------------------------------------------------------------
==11089== 
==11089== Thread #1502: Exiting thread still holds 1 lock
==11089==    at 0x5928E06: _Exit (_exit.c:31)
==11089==    by 0x5887111: __run_exit_handlers (exit.c:132)
==11089==    by 0x5887139: exit (exit.c:139)
==11089==    by 0x110DE1: test_sighandler (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x5882F1F: ??? (in /lib/x86_64-linux-gnu/libc-2.27.so)
==11089==    by 0x5882E96: __libc_signal_restore_set (nptl-signals.h:80)
==11089==    by 0x5882E96: raise (raise.c:48)
==11089==    by 0x5884800: abort (abort.c:79)
==11089==    by 0x10AC5D: UT_FATAL(char const*, ...) (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x10CD36: (anonymous namespace)::reader_mutex_until(void*) (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x4C369E1: mythread_wrapper (hg_intercepts.c:389)
==11089==    by 0x50886DA: start_thread (pthread_create.c:463)
==11089==    by 0x596588E: clone (clone.S:95)
==11089== 
==11089== 
==11089== For counts of detected and suppressed errors, rerun with: -v
==11089== Use --history-level=approx or =none to gain increased speed, at
==11089== the cost of reduced accuracy of conflicting-access information
==11089== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 16099 from 35)
 )
-- Stderr:
==11089== Helgrind, a thread error detector
==11089== Copyright (C) 2007-2017, and GNU GPL'd, by OpenWorks LLP et al.
==11089== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==11089== Command: /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile
==11089== 
/libpmemobj-cpp/tests/cond_var_posix/cond_var_posix.cpp:194 reader_mutex_until - assertion failure: diff < epsilon
==11089== ---Thread-Announcement------------------------------------------
==11089== 
==11089== Thread #1502 was created
==11089==    at 0x596587E: clone (clone.S:71)
==11089==    by 0x5088EC4: create_thread (createthread.c:100)
==11089==    by 0x5088EC4: pthread_create@@GLIBC_2.2.5 (pthread_create.c:797)
==11089==    by 0x4C367ED: pthread_create_WRK (hg_intercepts.c:427)
==11089==    by 0x4C378DF: pthread_create@* (hg_intercepts.c:460)
==11089==    by 0x10B8AF: void (anonymous namespace)::mutex_test<void* (*)(void*), void* (*)(void*)>(pmem::obj::pool<(anonymous namespace)::root>&, bool, bool, void* (*)(void*), void* (*)(void*)) [clone .constprop.53] (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x10B0E1: main (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089== 
==11089== ----------------------------------------------------------------
==11089== 
==11089== Thread #1502: Exiting thread still holds 1 lock
==11089==    at 0x5928E06: _Exit (_exit.c:31)
==11089==    by 0x5887111: __run_exit_handlers (exit.c:132)
==11089==    by 0x5887139: exit (exit.c:139)
==11089==    by 0x110DE1: test_sighandler (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x5882F1F: ??? (in /lib/x86_64-linux-gnu/libc-2.27.so)
==11089==    by 0x5882E96: __libc_signal_restore_set (nptl-signals.h:80)
==11089==    by 0x5882E96: raise (raise.c:48)
==11089==    by 0x5884800: abort (abort.c:79)
==11089==    by 0x10AC5D: UT_FATAL(char const*, ...) (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x10CD36: (anonymous namespace)::reader_mutex_until(void*) (in /libpmemobj-cpp/build/tests/cond_var_posix)
==11089==    by 0x4C369E1: mythread_wrapper (hg_intercepts.c:389)
==11089==    by 0x50886DA: start_thread (pthread_create.c:463)
==11089==    by 0x596588E: clone (clone.S:95)
==11089== 
==11089== 
==11089== For counts of detected and suppressed errors, rerun with: -v
==11089== Use --history-level=approx or =none to gain increased speed, at
==11089== the cost of reduced accuracy of conflicting-access information
==11089== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 16099 from 35)
/libpmemobj-cpp/tests/helpers.cmake(51):  if(EXISTS /libpmemobj-cpp/build/tests/cond_var_posix_0_helgrind/cond_var_posix_0_helgrind.pmreorder )
/libpmemobj-cpp/tests/helpers.cmake(199):  message(FATAL_ERROR valgrind;--error-exitcode=99;--tool=helgrind /libpmemobj-cpp/build/tests/cond_var_posix /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile failed: 99 )
CMake Error at /libpmemobj-cpp/tests/helpers.cmake:199 (message):
  valgrind;--error-exitcode=99;--tool=helgrind
  /libpmemobj-cpp/build/tests/cond_var_posix
  /libpmemobj-cpp/build/test/cond_var_posix_0_helgrind/testfile failed: 99
Call Stack (most recent call first):
  /libpmemobj-cpp/tests/helpers.cmake:241 (execute_common)
  /libpmemobj-cpp/tests/cond_var_posix/cond_var_posix_0.cmake:36 (execute)
igchor commented 5 years ago

Probably connected: #113