Merge lp:~alan-griffiths/mir/fix-1494197 into lp:mir
- fix-1494197
- Merge into development-branch
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 |
Related bugs: |
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
Description of the change
Mir CI Bot (mir-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:3919
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Alan Griffiths (alan-griffiths) wrote : | # |
Mir CI Bot (mir-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:3919
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Brandon Schaefer (brandontschaefer) wrote : | # |
lgtm small nit in diff (2 spaces)
Andreas Pokorny (andreas-pokorny) wrote : | # |
ok.. so this just adds an id to the protocol to identify sessions on a connection .. PromptSessionCo
Preview Diff
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 | { |
Looks good!