Mir

GLibMainLoopTest.propagates_exception_from_server_action fails with GCC 5 in armhf

Bug #1482274 reported by Alberto Aguirre
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
High
Alberto Aguirre
mir (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

Using -02 (which is turned on when building the mir packages or use_debflags=ON) with GCC 5 on armhf results in the following test failure:

bin/mir_unit_tests --gtest_filter=GLibMainLoopTest.propagates_exception_from_server_action
Running main() from main.cpp
Note: Google Test filter = GLibMainLoopTest.propagates_exception_from_server_action
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from GLibMainLoopTest
[ RUN ] GLibMainLoopTest.propagates_exception_from_server_action
terminate called after throwing an instance of 'std::runtime_error'
  what(): server action error
/home/alberto/source/mir/0.15/tests/unit-tests/test_glib_main_loop.cpp:78: Failure
Value of: result.succeeded()
  Actual: false
Expected: true
[ FAILED ] GLibMainLoopTest.propagates_exception_from_server_action (677 ms)
[----------] 1 test from GLibMainLoopTest (677 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (679 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] GLibMainLoopTest.propagates_exception_from_server_action

Related branches

Revision history for this message
Alberto Aguirre (albaguirre) wrote :

This is related to lp:1478213

Revision history for this message
Alberto Aguirre (albaguirre) wrote :

It seems like the issue is related to code using identical lambdas.

Both GLibMainLoopTest, propagates_exception_from_server_action and GLibMainLoopTest.can_be_rerun_after_exception (test_glib_main_loop.cpp) use the same definition:

    ml.enqueue(this, [] { throw std::runtime_error("server action error"); });

And when a definition is identical, the exception handler is not called for some reason. It seems as if the compiler registers the wrong info in the exception handler table.

Using a different message for the runtime_error exception in the lambda forces the compiler to produce a different implementation and the exception is then able to be caught as expected.

Revision history for this message
Alberto Aguirre (albaguirre) wrote :
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir at revision None, scheduled for release in mir, milestone 0.16.0

Changed in mir:
status: In Progress → Fix Committed
Changed in mir:
milestone: 0.16.0 → 0.15.0
no longer affects: mir/0.15
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (4.2 KiB)

This bug was fixed in the package mir - 0.15.0+15.10.20150818-0ubuntu1

---------------
mir (0.15.0+15.10.20150818-0ubuntu1) wily; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.15.0 (https://launchpad.net/mir/+milestone/0.15.0)
    - ABI summary: Only servers and graphics drivers need rebuilding;
      . Mirclient ABI unchanged at 9
      . Mirserver ABI bumped to 33
      . Mircommon ABI unchanged at 5
      . Mirplatform ABI bumped to 9
    - Enhancements:
      . Add support for Mir-on-X11.
      . Latency reduction optimizations (around ~15ms reduction in total):
        Reduced input event resampling latency by 5ms. Reduced output latency
        (in system compositors) by around 10ms with the introduction of
        "predictive bypass". And we're not finished; future Mir releases
        should reduce latency further.
      . Introduced a python3-based Mir performance framework.
      . Lots of preparation for an architectural overhaul of buffer swapping,
        required in the least to support future optimizations like nested
        bypass.
      . Added a new cursor: crosshair
      . Added support for 15/16-bit client pixel formats ("high colour").
      . Added a new client function to make picking the right pixel format
        for a given EGLConfig super simple: mir_connection_get_egl_pixel_format
      . Added application-not-responding detection
      . Added client API for specifying input region shape.
      . Fixed the remaining threading flaws identified by ThreadSanitizer and
        turned it on permanently for all continuous integration in future.
      . Added support for relative pointer motion events (e.g. for gaming).
    - Bug fixes:
      . Fix focus issues breaking autopilot tests entering text (LP: #1468029)
      . Fix mir tests failure on armhf with GCC5 (LP: #1478213)
      . mir_buffer_stream_swap_buffers_sync can hang constraints (LP: #1479899)
      . Loading libmirclient.so twice leads to a segfault in libmirprotobuf.so
        (LP: #1391976)
      . Visible corruption in SDL apps (LP: #1460149)
      . MultiThreadedCompositor::destroy_compositing_threads hangs/deadlocks on
        shutdown or display reconfiguration (LP: #1471909)
      . ctest/"make test" reports 100% tests pass even when some fail.
        (LP: #1472911)
      . Mir server crashed - GLib-CRITICAL **: g_source_get_context: assertion
       'source->context != NULL || !SOURCE_DESTROYED (source)' failed
        (LP: #1473869)
      . USC crash on multimonitor unplug [std::exception::what: error during
        hwc prepare()] (LP: #1474891)
      . [regression] Input focus delay after switching app back into focus
        (LP: #1480654)
      . GLibMainLoopTest.propagates_exception_from_server_action fails with
        GCC 5 in armhf (LP: #1482274)
      . [enhancement] Mir lacks relative mouse support (LP: #1276322)
      . ShmBuffer ignores pixel_format (LP: #1424909)
      . Fullscreen bypassed clients stutter with double buffers when other
        clients are running (LP: #1447896)
      . [regression] Demo servers crash on start-up if MIR_ENABLE_TESTS=OFF
        (LP: #1439078)
      . [regression] The software curs...

Read more...

Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.