Mir

Merge lp:~vanvugt/mir/fix-1528438 into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Cemil Azizoglu
Approved revision: no longer in the source branch.
Merged at revision: 3235
Proposed branch: lp:~vanvugt/mir/fix-1528438
Merge into: lp:mir
Diff against target: 37 lines (+13/-1)
2 files modified
src/server/input/android/input_sender.cpp (+2/-1)
tests/unit-tests/input/android/test_android_input_sender.cpp (+11/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/fix-1528438
Reviewer Review Type Date Requested Status
Andreas Pokorny (community) Approve
Mir CI Bot continuous-integration Approve
PS Jenkins bot (community) continuous-integration Approve
Kevin DuBois (community) Approve
Review via email: mp+281976@code.launchpad.net

Commit message

Don't crash the server when you encounter a client that ignores input.
They're perfectly common. (LP: #1528438)

The throw was only added in recently on 19 Dec 2015.

To post a comment you must log in.
Revision history for this message
Kevin DuBois (kdub) wrote :

lgtm

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:3230
http://jenkins.qa.ubuntu.com/job/mir-ci/5958/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5460
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4367
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5416
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/245
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/282
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/282/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/282
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/282/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5413
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5413/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7903
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26497
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/241
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/241/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/99
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26501

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/mir-ci/5958/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3230
https://mir-jenkins.ubuntu.com/job/mir-ci/2/
Executed test runs:
    None: https://mir-jenkins.ubuntu.com/job/generic-update-mp/2/console

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/2/rebuild

review: Approve (continuous-integration)
Revision history for this message
Andreas Pokorny (andreas-pokorny) wrote :

Back then I thought mir clients would always just grab the input from the fd.. and then ignore it. So I assumes that WOULD_BLOCK means something goes wrong.. I am fine with ignoring the failure and droping the send - attempt. At least that is what I planed to do in the two input dispatchers in most of the exception cases.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/server/input/android/input_sender.cpp'
2--- src/server/input/android/input_sender.cpp 2015-12-18 09:13:03 +0000
3+++ src/server/input/android/input_sender.cpp 2016-01-08 09:33:24 +0000
4@@ -194,9 +194,10 @@
5 subscribe();
6 break;
7 case droidinput::WOULD_BLOCK:
8- BOOST_THROW_EXCEPTION(boost::enable_error_info(std::runtime_error("Client input channel write blocked : ")) << boost::errinfo_errno(errno));
9+ // Not an error. Clients are allowed to ignore input.
10 break;
11 case droidinput::DEAD_OBJECT:
12+ // XXX This throw was recently added but is missing tests:
13 BOOST_THROW_EXCEPTION(boost::enable_error_info(std::runtime_error("Client channel dead : ")) << boost::errinfo_errno(errno));
14 break;
15 default:
16
17=== modified file 'tests/unit-tests/input/android/test_android_input_sender.cpp'
18--- tests/unit-tests/input/android/test_android_input_sender.cpp 2015-12-18 09:35:01 +0000
19+++ tests/unit-tests/input/android/test_android_input_sender.cpp 2016-01-08 09:33:24 +0000
20@@ -271,6 +271,17 @@
21 EXPECT_EQ(AINPUT_SOURCE_TOUCHSCREEN, client_motion_event.getSource());
22 }
23
24+TEST_F(AndroidInputSender, non_input_clients_dont_crash_the_server)
25+{ // Regression test for LP: #1528438
26+ register_surface();
27+
28+ EXPECT_NO_THROW(
29+ {
30+ for (int i = 0; i < 10000; ++i)
31+ sender.send_event(*motion_event, channel);
32+ });
33+}
34+
35 TEST_F(AndroidInputSender, sends_pointer_events)
36 {
37 using namespace ::testing;

Subscribers

People subscribed via source and target branches