Mir

Merge lp:~alan-griffiths/mir/fix-1494197 into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 3920
Proposed branch: lp:~alan-griffiths/mir/fix-1494197
Merge into: lp:mir
Diff against target: 443 lines (+137/-33)
13 files modified
src/client/mir_prompt_session.cpp (+3/-2)
src/client/mir_prompt_session.h (+2/-1)
src/client/rpc/mir_display_server.cpp (+2/-2)
src/client/rpc/mir_display_server.h (+2/-2)
src/include/common/mir/protobuf/display_server.h (+2/-2)
src/include/common/mir/protobuf/protocol_version.h (+2/-2)
src/protobuf/mir_protobuf.proto (+8/-0)
src/protobuf/symbols.map (+20/-0)
src/server/frontend/session_mediator.cpp (+33/-12)
src/server/frontend/session_mediator.h (+22/-4)
tests/acceptance-tests/test_prompt_session_client_api.cpp (+35/-0)
tests/include/mir/test/doubles/stub_display_server.h (+2/-2)
tests/unit-tests/client/test_mir_prompt_session.cpp (+4/-4)
To merge this branch: bzr merge lp:~alan-griffiths/mir/fix-1494197
Reviewer Review Type Date Requested Status
Andreas Pokorny (community) Approve
Brandon Schaefer (community) Approve
Mir CI Bot continuous-integration Approve
Nick Dedekind (community) Approve
Review via email: mp+314515@code.launchpad.net

Commit message

Remove the "phase one" restriction of one prompt session per prompt provider

To post a comment you must log in.
Revision history for this message
Nick Dedekind (nick-dedekind) wrote :

Looks good!

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

FAILED: Continuous integration, rev:3919
https://mir-jenkins.ubuntu.com/job/mir-ci/2643/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3433/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3500
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3492
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3492
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/3492
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3462
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3462/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3462/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3462
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3462/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3462
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3462/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3462
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3462/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3462
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3462/artifact/output/*zip*/output.zip

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

review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3919
https://mir-jenkins.ubuntu.com/job/mir-ci/2647/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/3438
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3505
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3497
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3497
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/3497
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3467/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)
Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

lgtm small nit in diff (2 spaces)

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

ok.. so this just adds an id to the protocol to identify sessions on a connection .. PromptSessionContainer is already capable of dealing with multiple prompt sessions being associated to a single session.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/client/mir_prompt_session.cpp'
2--- src/client/mir_prompt_session.cpp 2016-01-29 08:18:22 +0000
3+++ src/client/mir_prompt_session.cpp 2017-01-11 11:37:31 +0000
4@@ -42,7 +42,7 @@
5 set_state(mir_prompt_session_event_get_state(mir_event_get_prompt_session_event(&event)));
6 })},
7 state(mir_prompt_session_state_stopped),
8- session(mcl::make_protobuf_object<mir::protobuf::Void>()),
9+ session(mcl::make_protobuf_object<mir::protobuf::PromptSession>()),
10 handle_prompt_session_state_change{[](MirPromptSessionState){}}
11 {
12 }
13@@ -91,7 +91,7 @@
14 stop_wait_handle.expect_result();
15
16 server.stop_prompt_session(
17- protobuf_void.get(),
18+ session.get(),
19 protobuf_void.get(),
20 google::protobuf::NewCallback(this, &MirPromptSession::done_stop,
21 callback, context));
22@@ -149,6 +149,7 @@
23 {
24 mp::SocketFDRequest request;
25 request.set_number(no_of_fds);
26+ request.set_prompt_session_id(session->id());
27
28 fds_for_prompt_providers_wait_handle.expect_result();
29
30
31=== modified file 'src/client/mir_prompt_session.h'
32--- src/client/mir_prompt_session.h 2016-01-29 08:18:22 +0000
33+++ src/client/mir_prompt_session.h 2017-01-11 11:37:31 +0000
34@@ -34,6 +34,7 @@
35 class PromptSessionParameters;
36 class SocketFD;
37 class Void;
38+class PromptSession;
39 }
40 /// The client-side library implementation namespace
41 namespace client
42@@ -82,7 +83,7 @@
43 std::atomic<MirPromptSessionState> state;
44
45 std::mutex mutable session_mutex; // Protects session
46- std::unique_ptr<mir::protobuf::Void> session;
47+ std::unique_ptr<mir::protobuf::PromptSession> session;
48
49 std::mutex mutable event_handler_mutex; // Need another mutex for callback access to members
50 std::function<void(MirPromptSessionState)> handle_prompt_session_state_change;
51
52=== modified file 'src/client/rpc/mir_display_server.cpp'
53--- src/client/rpc/mir_display_server.cpp 2016-12-23 15:33:03 +0000
54+++ src/client/rpc/mir_display_server.cpp 2017-01-11 11:37:31 +0000
55@@ -177,13 +177,13 @@
56 }
57 void mclr::DisplayServer::start_prompt_session(
58 mir::protobuf::PromptSessionParameters const* request,
59- mir::protobuf::Void* response,
60+ mir::protobuf::PromptSession* response,
61 google::protobuf::Closure* done)
62 {
63 channel->call_method(std::string(__func__), request, response, done);
64 }
65 void mclr::DisplayServer::stop_prompt_session(
66- mir::protobuf::Void const* request,
67+ mir::protobuf::PromptSession const* request,
68 mir::protobuf::Void* response,
69 google::protobuf::Closure* done)
70 {
71
72=== modified file 'src/client/rpc/mir_display_server.h'
73--- src/client/rpc/mir_display_server.h 2016-12-23 15:33:03 +0000
74+++ src/client/rpc/mir_display_server.h 2017-01-11 11:37:31 +0000
75@@ -121,10 +121,10 @@
76 google::protobuf::Closure* done) override;
77 void start_prompt_session(
78 mir::protobuf::PromptSessionParameters const* request,
79- mir::protobuf::Void* response,
80+ mir::protobuf::PromptSession* response,
81 google::protobuf::Closure* done) override;
82 void stop_prompt_session(
83- mir::protobuf::Void const* request,
84+ mir::protobuf::PromptSession const* request,
85 mir::protobuf::Void* response,
86 google::protobuf::Closure* done) override;
87 void submit_buffer(
88
89=== modified file 'src/include/common/mir/protobuf/display_server.h'
90--- src/include/common/mir/protobuf/display_server.h 2016-12-23 15:33:03 +0000
91+++ src/include/common/mir/protobuf/display_server.h 2017-01-11 11:37:31 +0000
92@@ -117,10 +117,10 @@
93 google::protobuf::Closure* done) = 0;
94 virtual void start_prompt_session(
95 mir::protobuf::PromptSessionParameters const* request,
96- mir::protobuf::Void* response,
97+ ::mir::protobuf::PromptSession* response,
98 google::protobuf::Closure* done) = 0;
99 virtual void stop_prompt_session(
100- mir::protobuf::Void const* request,
101+ mir::protobuf::PromptSession const* request,
102 mir::protobuf::Void* response,
103 google::protobuf::Closure* done) = 0;
104 virtual void submit_buffer(
105
106=== modified file 'src/include/common/mir/protobuf/protocol_version.h'
107--- src/include/common/mir/protobuf/protocol_version.h 2016-07-18 07:38:38 +0000
108+++ src/include/common/mir/protobuf/protocol_version.h 2017-01-11 11:37:31 +0000
109@@ -27,12 +27,12 @@
110 {
111 inline constexpr int current_protocol_version()
112 {
113- return MIR_VERSION_NUMBER(0,3,3);
114+ return MIR_VERSION_NUMBER(0,4,0);
115 }
116
117 inline constexpr int oldest_compatible_protocol_version()
118 {
119- return MIR_VERSION_NUMBER(0,3,0);
120+ return MIR_VERSION_NUMBER(0,4,0);
121 }
122
123 inline constexpr int next_incompatible_protocol_version()
124
125=== modified file 'src/protobuf/mir_protobuf.proto'
126--- src/protobuf/mir_protobuf.proto 2016-12-21 03:07:05 +0000
127+++ src/protobuf/mir_protobuf.proto 2017-01-11 11:37:31 +0000
128@@ -382,6 +382,7 @@
129
130 message SocketFDRequest {
131 required int32 number = 1;
132+ required int32 prompt_session_id = 2;
133 }
134
135 message SocketFD {
136@@ -396,6 +397,13 @@
137 required int32 application_pid = 1;
138 }
139
140+message PromptSession {
141+ optional int32 id = 1;
142+
143+ optional string error = 127;
144+ optional StructuredError structured_error = 128;
145+}
146+
147 message PlatformOperationMessage {
148 optional uint32 opcode = 1;
149 optional bytes data = 2;
150
151=== modified file 'src/protobuf/symbols.map'
152--- src/protobuf/symbols.map 2016-11-28 16:59:09 +0000
153+++ src/protobuf/symbols.map 2017-01-11 11:37:31 +0000
154@@ -1088,5 +1088,25 @@
155 typeinfo?for?mir::protobuf::ScreencastRequest;
156 vtable?for?mir::protobuf::ScreencastRequest;
157 non-virtual?thunk?to?mir::protobuf::ScreencastRequest::?ScreencastRequest*;
158+
159+ mir::protobuf::PromptSession::ByteSize*;
160+ mir::protobuf::PromptSession::CheckTypeAndMergeFrom*;
161+ mir::protobuf::PromptSession::Clear*;
162+ mir::protobuf::PromptSession::CopyFrom*;
163+ mir::protobuf::PromptSession::default_instance*;
164+ mir::protobuf::PromptSession::DiscardUnknownFields*;
165+ mir::protobuf::PromptSession::GetTypeName*;
166+ mir::protobuf::PromptSession::IsInitialized*;
167+ mir::protobuf::PromptSession::kApplicationPidFieldNumber*;
168+ mir::protobuf::PromptSession::MergeFrom*;
169+ mir::protobuf::PromptSession::MergePartialFromCodedStream*;
170+ mir::protobuf::PromptSession::New*;
171+ mir::protobuf::PromptSession::?PromptSession*;
172+ mir::protobuf::PromptSession::PromptSession*;
173+ mir::protobuf::PromptSession::SerializeWithCachedSizes*;
174+ mir::protobuf::PromptSession::Swap*;
175+ non-virtual?thunk?to?mir::protobuf::PromptSession::?PromptSession*;
176+ typeinfo?for?mir::protobuf::PromptSession;
177+ vtable?for?mir::protobuf::PromptSession;
178 };
179 } MIR_PROTOBUF_0.22;
180
181=== modified file 'src/server/frontend/session_mediator.cpp'
182--- src/server/frontend/session_mediator.cpp 2016-12-23 15:33:03 +0000
183+++ src/server/frontend/session_mediator.cpp 2017-01-11 11:37:31 +0000
184@@ -891,11 +891,12 @@
185 }
186
187
188-std::function<void(std::shared_ptr<mf::Session> const&)> mf::SessionMediator::prompt_session_connect_handler() const
189+auto mf::SessionMediator::prompt_session_connect_handler(detail::PromptSessionId prompt_session_id) const
190+-> std::function<void(std::shared_ptr<mf::Session> const&)>
191 {
192- return [this](std::shared_ptr<mf::Session> const& session)
193+ return [this, prompt_session_id](std::shared_ptr<mf::Session> const& session)
194 {
195- auto prompt_session = weak_prompt_session.lock();
196+ auto prompt_session = prompt_sessions.fetch(prompt_session_id);
197 if (prompt_session.get() == nullptr)
198 BOOST_THROW_EXCEPTION(std::logic_error("Invalid prompt session"));
199
200@@ -951,7 +952,7 @@
201 if (session.get() == nullptr)
202 BOOST_THROW_EXCEPTION(std::logic_error("Invalid application session"));
203
204- auto const connect_handler = prompt_session_connect_handler();
205+ auto const connect_handler = prompt_session_connect_handler(detail::PromptSessionId(parameters->prompt_session_id()));
206
207 auto const fds_requested = parameters->number();
208
209@@ -1038,7 +1039,7 @@
210
211 void mf::SessionMediator::start_prompt_session(
212 const ::mir::protobuf::PromptSessionParameters* request,
213- ::mir::protobuf::Void* /*response*/,
214+ ::mir::protobuf::PromptSession* response,
215 ::google::protobuf::Closure* done)
216 {
217 auto const session = weak_session.lock();
218@@ -1046,21 +1047,18 @@
219 if (!session)
220 BOOST_THROW_EXCEPTION(std::logic_error("Invalid application session"));
221
222- if (weak_prompt_session.lock())
223- BOOST_THROW_EXCEPTION(std::runtime_error("Cannot start another prompt session"));
224-
225 ms::PromptSessionCreationParameters parameters;
226 parameters.application_pid = request->application_pid();
227
228 observer->session_start_prompt_session_called(session->name(), parameters.application_pid);
229
230- weak_prompt_session = shell->start_prompt_session_for(session, parameters);
231+ response->set_id(prompt_sessions.insert(shell->start_prompt_session_for(session, parameters)).as_value());
232
233 done->Run();
234 }
235
236 void mf::SessionMediator::stop_prompt_session(
237- const ::mir::protobuf::Void*,
238+ protobuf::PromptSession const* request,
239 ::mir::protobuf::Void*,
240 ::google::protobuf::Closure* done)
241 {
242@@ -1069,12 +1067,13 @@
243 if (!session)
244 BOOST_THROW_EXCEPTION(std::logic_error("Invalid application session"));
245
246- auto const prompt_session = weak_prompt_session.lock();
247+ detail::PromptSessionId const id{request->id()};
248+ auto const prompt_session = prompt_sessions.fetch(id);
249
250 if (!prompt_session)
251 BOOST_THROW_EXCEPTION(std::logic_error("Invalid prompt session"));
252
253- weak_prompt_session.reset();
254+ prompt_sessions.remove(id);
255
256 observer->session_stop_prompt_session_called(session->name());
257
258@@ -1201,3 +1200,25 @@
259 for (auto const& id : ids_to_untrack)
260 screencast_buffer_tracker.remove_session(id);
261 }
262+
263+
264+auto mf::detail::PromptSessionStore::insert(std::shared_ptr<PromptSession> const& session) -> PromptSessionId
265+{
266+ std::lock_guard<decltype(mutex)> lock{mutex};
267+ auto const id = PromptSessionId{++next_id};
268+ sessions[id] = session;
269+ return id;
270+}
271+
272+auto mf::detail::PromptSessionStore::fetch(PromptSessionId session) const
273+-> std::shared_ptr<PromptSession>
274+{
275+ std::lock_guard<decltype(mutex)> lock{mutex};
276+ return sessions[session].lock();
277+}
278+
279+void mf::detail::PromptSessionStore::remove(PromptSessionId session)
280+{
281+ std::lock_guard<decltype(mutex)> lock{mutex};
282+ sessions.erase(session);
283+}
284
285=== modified file 'src/server/frontend/session_mediator.h'
286--- src/server/frontend/session_mediator.h 2016-12-23 15:33:03 +0000
287+++ src/server/frontend/session_mediator.h 2017-01-11 11:37:31 +0000
288@@ -77,6 +77,23 @@
289 class PromptSession;
290 class BufferStream;
291
292+namespace detail
293+{
294+typedef IntWrapper<struct PromptSessionTag> PromptSessionId;
295+
296+struct PromptSessionStore
297+{
298+ auto insert(std::shared_ptr<PromptSession> const& session) -> PromptSessionId;
299+ auto fetch(PromptSessionId session) const -> std::shared_ptr<PromptSession>;
300+ void remove(PromptSessionId session);
301+
302+private:
303+ std::mutex mutable mutex;
304+ int32_t next_id{0};
305+ std::map<PromptSessionId, std::weak_ptr<PromptSession>> mutable sessions;
306+};
307+}
308+
309 /**
310 * SessionMediator relays requests from the client process into the server.
311 *
312@@ -198,10 +215,10 @@
313 google::protobuf::Closure* done) override;
314 void start_prompt_session(
315 mir::protobuf::PromptSessionParameters const* request,
316- mir::protobuf::Void* response,
317+ mir::protobuf::PromptSession* response,
318 google::protobuf::Closure* done) override;
319 void stop_prompt_session(
320- mir::protobuf::Void const* request,
321+ mir::protobuf::PromptSession const* request,
322 mir::protobuf::Void* response,
323 google::protobuf::Closure* done) override;
324 void submit_buffer(
325@@ -253,7 +270,8 @@
326 std::shared_ptr<graphics::DisplayConfiguration> unpack_and_sanitize_display_configuration(
327 protobuf::DisplayConfiguration const*);
328
329- virtual std::function<void(std::shared_ptr<Session> const&)> prompt_session_connect_handler() const;
330+ virtual std::function<void(std::shared_ptr<Session> const&)>
331+ prompt_session_connect_handler(detail::PromptSessionId prompt_session_id) const;
332
333 void destroy_screencast_sessions();
334
335@@ -280,7 +298,7 @@
336 ScreencastBufferTracker screencast_buffer_tracker;
337
338 std::weak_ptr<Session> weak_session;
339- std::weak_ptr<PromptSession> weak_prompt_session;
340+ detail::PromptSessionStore prompt_sessions;
341
342 std::map<frontend::SurfaceId, frontend::BufferStreamId> legacy_default_stream_map;
343 };
344
345=== modified file 'tests/acceptance-tests/test_prompt_session_client_api.cpp'
346--- tests/acceptance-tests/test_prompt_session_client_api.cpp 2017-01-09 06:48:47 +0000
347+++ tests/acceptance-tests/test_prompt_session_client_api.cpp 2017-01-11 11:37:31 +0000
348@@ -618,6 +618,41 @@
349 mir_prompt_session_release_sync(prompt_session);
350 }
351
352+TEST_F(PromptSessionClientAPI, can_start_and_stop_multiple_prompt_sessions)
353+{
354+ const int sessions = 10;
355+
356+ connection = mir_connect_sync(new_connection().c_str(), "Prompt session helper");
357+
358+ MirPromptSession* prompt_sessions[sessions] = {nullptr };
359+
360+ for (auto& prompt_session : prompt_sessions)
361+ {
362+ prompt_session = mir_connection_create_prompt_session_sync(
363+ connection, application_session_pid, null_state_change_callback, this);
364+
365+ ASSERT_THAT(prompt_session, Ne(nullptr));
366+ }
367+
368+ for (auto& prompt_session : prompt_sessions)
369+ {
370+ EXPECT_THAT(mir_prompt_session_is_valid(prompt_session), Eq(true));
371+ EXPECT_THAT(mir_prompt_session_error_message(prompt_session), StrEq(""));
372+
373+ mir_prompt_session_new_fds_for_prompt_providers(
374+ prompt_session, 1, &client_fd_callback, this);
375+
376+ ASSERT_TRUE(wait_for_callback(std::chrono::milliseconds(500)));
377+
378+ DummyPromptProvider{std::move(actual_fds[0]), "Prompt session provider"};
379+ }
380+
381+ for (auto& prompt_session : prompt_sessions)
382+ {
383+ mir_prompt_session_release_sync(prompt_session);
384+ }
385+}
386+
387 // Test canary for kernel regression (also compiles as a standalone C test)
388 #include <stdlib.h>
389 #include <stdio.h>
390
391=== modified file 'tests/include/mir/test/doubles/stub_display_server.h'
392--- tests/include/mir/test/doubles/stub_display_server.h 2016-12-23 15:33:03 +0000
393+++ tests/include/mir/test/doubles/stub_display_server.h 2017-01-11 11:37:31 +0000
394@@ -120,10 +120,10 @@
395 google::protobuf::Closure* /*done*/) {}
396 void start_prompt_session(
397 mir::protobuf::PromptSessionParameters const* /*request*/,
398- mir::protobuf::Void* /*response*/,
399+ mir::protobuf::PromptSession* /*response*/,
400 google::protobuf::Closure* /*done*/) {}
401 void stop_prompt_session(
402- mir::protobuf::Void const* /*request*/,
403+ mir::protobuf::PromptSession const* /*request*/,
404 mir::protobuf::Void* /*response*/,
405 google::protobuf::Closure* /*done*/) {}
406 void exchange_buffer(
407
408=== modified file 'tests/unit-tests/client/test_mir_prompt_session.cpp'
409--- tests/unit-tests/client/test_mir_prompt_session.cpp 2016-01-29 08:18:22 +0000
410+++ tests/unit-tests/client/test_mir_prompt_session.cpp 2017-01-11 11:37:31 +0000
411@@ -50,12 +50,12 @@
412 MOCK_METHOD3(start_prompt_session,
413 void(
414 mir::protobuf::PromptSessionParameters const* /*request*/,
415- mir::protobuf::Void* /*response*/,
416+ mir::protobuf::PromptSession* /*response*/,
417 google::protobuf::Closure* /*done*/));
418
419 MOCK_METHOD3(stop_prompt_session,
420 void(
421- mir::protobuf::Void const* /*request*/,
422+ mir::protobuf::PromptSession const* /*request*/,
423 mir::protobuf::Void* /*response*/,
424 google::protobuf::Closure* /*done*/));
425 };
426@@ -67,7 +67,7 @@
427
428 void start_prompt_session(
429 mir::protobuf::PromptSessionParameters const* /*request*/,
430- mir::protobuf::Void* response,
431+ mir::protobuf::PromptSession* response,
432 google::protobuf::Closure* done) override
433 {
434 if (server_thread.joinable())
435@@ -81,7 +81,7 @@
436 }
437
438 void stop_prompt_session(
439- mir::protobuf::Void const* /*request*/,
440+ mir::protobuf::PromptSession const* /*request*/,
441 mir::protobuf::Void* /*response*/,
442 google::protobuf::Closure* done) override
443 {

Subscribers

People subscribed via source and target branches