Mir server crahes when allocating & freeing surfaces from multiple threads
Bug #1185589 reported by
Thomi Richards
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
High
|
Robert Carr |
Bug Description
The mir_demo_server crashes if I try and allocate & free surfaces from multiple threads. To reproduce, grab:
Build it:
mkdir build
cd build
cmake ..
make
And run it like so:
./mir-stress -t 2 -n 10
(that runs with 2 threads for 10 seconds - if you want to be more violent, try with '-t 8' for 8 threads, or omit the '-t n' parameter alltogether, in which case it will use num_cores).
Related branches
lp:~robertcarr/mir/improve-input-channels
- PS Jenkins bot (community): Approve (continuous-integration)
- Kevin DuBois (community): Approve
-
Diff: 207 lines (+39/-43)5 files modified3rd_party/android-input/android/frameworks/base/include/androidfw/InputTransport.h (+1/-2)
3rd_party/android-input/android/frameworks/base/services/input/InputTransport.cpp (+8/-15)
src/server/input/android/android_input_channel.cpp (+8/-4)
src/server/input/android/android_input_channel.h (+1/-2)
tests/unit-tests/client/input/test_android_input_receiver.cpp (+21/-20)
lp:~robertcarr/mir/fix-input-registrar-locking
- Kevin DuBois (community): Approve
- Alan Griffiths: Approve
- PS Jenkins bot (community): Approve (continuous-integration)
-
Diff: 64 lines (+27/-20)1 file modifiedsrc/server/input/android/android_input_registrar.cpp (+27/-20)
lp:~robertcarr/mir/fix-surface-stack-input-locking
- Alexandros Frantzis (community): Approve
- Alan Griffiths: Approve
- PS Jenkins bot (community): Approve (continuous-integration)
-
Diff: 38 lines (+8/-3)1 file modifiedsrc/server/surfaces/surface_stack.cpp (+8/-3)
lp:~robertcarr/mir/rebuild-input-targeting
- PS Jenkins bot (community): Approve (continuous-integration)
- Alexandros Frantzis (community): Approve
- Robert Ancell: Approve
- Alan Griffiths: Approve
-
Diff: 6675 lines (+2366/-1515)89 files modified3rd_party/android-input/android/frameworks/base/services/input/InputDispatcher.cpp (+128/-126)
3rd_party/android-input/android/frameworks/base/services/input/InputDispatcher.h (+27/-6)
3rd_party/android-input/android/frameworks/base/services/input/InputEnumerator.h (+43/-0)
3rd_party/android-input/android/frameworks/base/services/input/InputManager.h (+0/-109)
examples/render_surfaces.cpp (+0/-1)
include/server/mir/default_server_configuration.h (+10/-8)
include/server/mir/input/input_configuration.h (+18/-21)
include/server/mir/input/input_targets.h (+49/-0)
include/server/mir/input/null_input_configuration.h (+49/-0)
include/server/mir/input/null_input_manager.h (+0/-51)
include/server/mir/input/null_input_target_listener.h (+0/-63)
include/server/mir/input/session_target.h (+0/-45)
include/server/mir/input/surface_target.h (+1/-1)
include/server/mir/shell/application_session.h (+1/-5)
include/server/mir/shell/input_target_listener.h (+0/-59)
include/server/mir/shell/input_targeter.h (+52/-0)
include/server/mir/shell/session.h (+1/-2)
include/server/mir/shell/session_manager.h (+1/-3)
include/server/mir/shell/single_visibility_focus_mechanism.h (+5/-1)
include/server/mir/shell/surface.h (+5/-10)
include/server/mir/shell/surface_source.h (+1/-6)
include/server/mir/surfaces/input_registrar.h (+54/-0)
include/server/mir/surfaces/surface.h (+12/-1)
include/server/mir/surfaces/surface_stack.h (+18/-3)
include/test/mir_test_doubles/mock_input_configuration.h (+5/-0)
include/test/mir_test_doubles/mock_input_dispatcher.h (+4/-1)
include/test/mir_test_doubles/mock_input_registrar.h (+7/-12)
include/test/mir_test_doubles/mock_input_targeter.h (+44/-0)
include/test/mir_test_doubles/mock_surface.h (+2/-1)
include/test/mir_test_doubles/stub_input_registrar.h (+6/-20)
include/test/mir_test_doubles/stub_input_targeter.h (+45/-0)
include/test/mir_test_doubles/stub_session_target.h (+0/-44)
include/test/mir_test_doubles/stub_surface_builder.h (+2/-1)
include/test/mir_test_doubles/stub_surface_target.h (+3/-2)
include/test/mir_test_framework/testing_server_configuration.h (+1/-2)
src/server/default_server_configuration.cpp (+42/-33)
src/server/frontend/session_mediator.cpp (+1/-1)
src/server/input/CMakeLists.txt (+2/-0)
src/server/input/android/CMakeLists.txt (+3/-1)
src/server/input/android/android_input_application_handle.cpp (+6/-6)
src/server/input/android/android_input_application_handle.h (+3/-3)
src/server/input/android/android_input_manager.cpp (+8/-6)
src/server/input/android/android_input_manager.h (+4/-7)
src/server/input/android/android_input_registrar.cpp (+78/-0)
src/server/input/android/android_input_registrar.h (+72/-0)
src/server/input/android/android_input_target_enumerator.cpp (+49/-0)
src/server/input/android/android_input_target_enumerator.h (+67/-0)
src/server/input/android/android_input_targeter.cpp (+26/-77)
src/server/input/android/android_input_targeter.h (+13/-22)
src/server/input/android/android_window_handle_repository.h (+59/-0)
src/server/input/android/default_android_input_configuration.cpp (+49/-1)
src/server/input/android/default_android_input_configuration.h (+35/-13)
src/server/input/null_input_configuration.cpp (+93/-0)
src/server/shell/application_session.cpp (+1/-7)
src/server/shell/session_manager.cpp (+2/-15)
src/server/shell/single_visibility_focus_mechanism.cpp (+16/-4)
src/server/shell/surface.cpp (+38/-15)
src/server/shell/surface_source.cpp (+2/-6)
src/server/surfaces/surface.cpp (+30/-1)
src/server/surfaces/surface_stack.cpp (+25/-3)
src/shared/input/android/android_input_receiver.cpp (+26/-22)
src/shared/input/android/android_input_receiver.h (+2/-0)
tests/acceptance-tests/test_client_input.cpp (+239/-59)
tests/acceptance-tests/test_focus_selection.cpp (+9/-13)
tests/acceptance-tests/test_server_shutdown.cpp (+9/-5)
tests/behavior-tests/session_management_context.cpp (+0/-3)
tests/death-tests/test_application_manager_death.cpp (+0/-1)
tests/integration-tests/graphics/android/test_internal_client.cpp (+6/-2)
tests/integration-tests/input/android/CMakeLists.txt (+0/-1)
tests/integration-tests/input/android/test_android_cursor_listener.cpp (+15/-3)
tests/integration-tests/input/android/test_android_input_manager.cpp (+36/-23)
tests/integration-tests/input/android/test_fake_event_hub_to_event_filter.cpp (+0/-118)
tests/integration-tests/shell/test_session_manager.cpp (+3/-7)
tests/mir_test_framework/testing_server_options.cpp (+7/-19)
tests/unit-tests/input/android/CMakeLists.txt (+2/-1)
tests/unit-tests/input/android/test_android_input_application_handle.cpp (+23/-19)
tests/unit-tests/input/android/test_android_input_manager.cpp (+2/-25)
tests/unit-tests/input/android/test_android_input_registrar.cpp (+25/-169)
tests/unit-tests/input/android/test_android_input_target_enumerator.cpp (+161/-0)
tests/unit-tests/input/android/test_android_input_targeter.cpp (+169/-0)
tests/unit-tests/input/android/test_android_input_window_handle.cpp (+2/-2)
tests/unit-tests/shell/test_application_session.cpp (+5/-11)
tests/unit-tests/shell/test_registration_order_focus_sequence.cpp (+10/-12)
tests/unit-tests/shell/test_session_manager.cpp (+6/-80)
tests/unit-tests/shell/test_single_visibility_focus_mechanism.cpp (+41/-2)
tests/unit-tests/shell/test_surface.cpp (+63/-61)
tests/unit-tests/shell/test_the_session_container_implementation.cpp (+3/-5)
tests/unit-tests/surfaces/test_surface.cpp (+76/-19)
tests/unit-tests/surfaces/test_surface_stack.cpp (+108/-8)
Changed in mir: | |
status: | New → Triaged |
importance: | Undecided → High |
assignee: | nobody → Robert Carr (robertcarr) |
Changed in mir: | |
milestone: | none → 0.0.4 |
Changed in mir: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
Upon further investigation, it seems the crash is prevented by running:
./mir_demo_server --enable- input=false
And the stack trace indicates the input system is to blame, so I think we now have a pretty good idea of where the problem is :)