← Back to team overview

touch-packages team mailing list archive

[Bug 1504579] Re: CI failure on some 32-bit targets in ServerSignal.terminate_handler_is_called_for_SIGTERM and others

 

** Changed in: mir
       Status: Fix Committed => Fix Released

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to mir in Ubuntu.
https://bugs.launchpad.net/bugs/1504579

Title:
  CI failure on some 32-bit targets in
  ServerSignal.terminate_handler_is_called_for_SIGTERM and others

Status in Mir:
  Fix Released
Status in mir package in Ubuntu:
  Fix Released

Bug description:
  Running CI on certain 32-bit Wily targets fails a slew of tests with
  valgrind errors similar to the below.

  ==30124== Syscall param futex(timeout) points to unaddressable byte(s)
  ==30124==    at 0x46CA5A7: syscall (syscall.S:30)
  ==30124==    by 0x44CD335: std::__atomic_futex_unsigned_base::_M_futex_wait_until(unsigned int*, unsigned int, bool, std::chrono::duration<long long, std::ratio<1ll, 1ll> >, std::chrono::duration<long long, std::ratio<1ll, 1000000000ll> >) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.21)
  ==30124==    by 0x40C8076: _M_load_and_test_until (atomic_futex.h:104)
  ==30124==    by 0x40C8076: _M_load_and_test (atomic_futex.h:122)
  ==30124==    by 0x40C8076: _M_load_when_equal (atomic_futex.h:162)
  ==30124==    by 0x40C8076: wait (future:322)
  ==30124==    by 0x40C8076: std::__basic_future<void>::wait() const (future:656)
  ==30124==    by 0x40C7111: mir::input::DefaultInputManager::stop() (default_input_manager.cpp:139)
  ==30124==    by 0x40A4A30: mir::DisplayServer::run() (display_server.cpp:205)
  ==30124==    by 0x40A104B: mir::run_mir(mir::ServerConfiguration&, std::function<void (mir::DisplayServer&)>, std::function<void (int)> const&) (run_mir.cpp:110)
  ==30124==    by 0x40B8C84: mir::Server::run() (server.cpp:405)
  ==30124==    by 0x84A8279: operator() (async_server_runner.cpp:88)
  ==30124==    by 0x84A8279: _M_invoke<> (functional:1531)
  ==30124==    by 0x84A8279: operator() (functional:1520)
  ==30124==    by 0x84A8279: std::thread::_Impl<std::_Bind_simple<mir_test_framework::AsyncServerRunner::start_server()::{lambda()#2} ()> >::_M_run() (thread:115)
  ==30124==    by 0x44CF7ED: ??? (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.21)
  ==30124==    by 0x45CE1A9: start_thread (pthread_create.c:333)
  ==30124==    by 0x46CEFDD: clone (clone.S:122)
  ==30124==  Address 0x18 is not stack'd, malloc'd or (recently) free'd

  The errors can be reproduced with hte following comand.

  valgrind --error-exitcode=1 --trace-children=yes --leak-check=full
  --show-leak-kinds=definite --errors-for-leak-kinds=definite --track-
  fds=yes --num-callers=128
  --suppressions=tools/valgrind_suppressions_generic
  --suppressions=tools/valgrind_suppressions_glibc_2.21 obj-i686-linux-
  gnu/bin/mir_acceptance_tests
  --gtest_filter=ServerSignal.terminate_handler_is_called_for_SIGTERM

  It turns out the problem is code in libstdc++-v3 not passing all
  required parameters to a syscall() on a futex.  We can probably assume
  the authors of that library know more about what they're doing with
  Linux kernel calls than we do, so I think adding a valgrind
  suppression for these errors should be all that's required to fix the
  CI failures.

To manage notifications about this bug go to:
https://bugs.launchpad.net/mir/+bug/1504579/+subscriptions