Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1178)

Side by Side Diff: mojo/system/remote_message_pipe_unittest.cc

Issue 419973005: Convert WriteMessage...() to use the new user pointer handling (see r285350). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. 195 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1.
196 196
197 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 197 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
198 // it later, it might already be readable.) 198 // it later, it might already be readable.)
199 waiter.Init(); 199 waiter.Init();
200 ASSERT_EQ(MOJO_RESULT_OK, 200 ASSERT_EQ(MOJO_RESULT_OK,
201 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); 201 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123));
202 202
203 // Write to MP 0, port 0. 203 // Write to MP 0, port 0.
204 EXPECT_EQ(MOJO_RESULT_OK, 204 EXPECT_EQ(MOJO_RESULT_OK,
205 mp0->WriteMessage(0, 205 mp0->WriteMessage(0, UserPointer<const void>(kHello),
206 kHello, sizeof(kHello), 206 sizeof(kHello), NULL,
207 NULL,
208 MOJO_WRITE_MESSAGE_FLAG_NONE)); 207 MOJO_WRITE_MESSAGE_FLAG_NONE));
209 208
210 // Wait. 209 // Wait.
211 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 210 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
212 EXPECT_EQ(123u, context); 211 EXPECT_EQ(123u, context);
213 mp1->RemoveWaiter(1, &waiter); 212 mp1->RemoveWaiter(1, &waiter);
214 213
215 // Read from MP 1, port 1. 214 // Read from MP 1, port 1.
216 EXPECT_EQ(MOJO_RESULT_OK, 215 EXPECT_EQ(MOJO_RESULT_OK,
217 mp1->ReadMessage(1, UserPointer<void>(buffer), 216 mp1->ReadMessage(1, UserPointer<void>(buffer),
218 MakeUserPointer(&buffer_size), NULL, NULL, 217 MakeUserPointer(&buffer_size), NULL, NULL,
219 MOJO_READ_MESSAGE_FLAG_NONE)); 218 MOJO_READ_MESSAGE_FLAG_NONE));
220 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 219 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
221 EXPECT_STREQ(kHello, buffer); 220 EXPECT_STREQ(kHello, buffer);
222 221
223 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. 222 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0.
224 223
225 waiter.Init(); 224 waiter.Init();
226 ASSERT_EQ(MOJO_RESULT_OK, 225 ASSERT_EQ(MOJO_RESULT_OK,
227 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); 226 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456));
228 227
229 EXPECT_EQ(MOJO_RESULT_OK, 228 EXPECT_EQ(MOJO_RESULT_OK,
230 mp1->WriteMessage(1, 229 mp1->WriteMessage(1, UserPointer<const void>(kWorld),
231 kWorld, sizeof(kWorld), 230 sizeof(kWorld), NULL,
232 NULL,
233 MOJO_WRITE_MESSAGE_FLAG_NONE)); 231 MOJO_WRITE_MESSAGE_FLAG_NONE));
234 232
235 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 233 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
236 EXPECT_EQ(456u, context); 234 EXPECT_EQ(456u, context);
237 mp0->RemoveWaiter(0, &waiter); 235 mp0->RemoveWaiter(0, &waiter);
238 236
239 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 237 buffer_size = static_cast<uint32_t>(sizeof(buffer));
240 EXPECT_EQ(MOJO_RESULT_OK, 238 EXPECT_EQ(MOJO_RESULT_OK,
241 mp0->ReadMessage(0, UserPointer<void>(buffer), 239 mp0->ReadMessage(0, UserPointer<void>(buffer),
242 MakeUserPointer(&buffer_size), NULL, NULL, 240 MakeUserPointer(&buffer_size), NULL, NULL,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()))); 292 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint())));
295 ConnectMessagePipes(mp2, mp3); 293 ConnectMessagePipes(mp2, mp3);
296 294
297 // Write: MP 2, port 0 -> MP 3, port 1. 295 // Write: MP 2, port 0 -> MP 3, port 1.
298 296
299 waiter.Init(); 297 waiter.Init();
300 ASSERT_EQ(MOJO_RESULT_OK, 298 ASSERT_EQ(MOJO_RESULT_OK,
301 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); 299 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789));
302 300
303 EXPECT_EQ(MOJO_RESULT_OK, 301 EXPECT_EQ(MOJO_RESULT_OK,
304 mp2->WriteMessage(0, 302 mp2->WriteMessage(0, UserPointer<const void>(kHello),
305 kHello, sizeof(kHello), 303 sizeof(kHello), NULL,
306 NULL,
307 MOJO_WRITE_MESSAGE_FLAG_NONE)); 304 MOJO_WRITE_MESSAGE_FLAG_NONE));
308 305
309 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 306 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
310 EXPECT_EQ(789u, context); 307 EXPECT_EQ(789u, context);
311 mp3->RemoveWaiter(1, &waiter); 308 mp3->RemoveWaiter(1, &waiter);
312 309
313 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. 310 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0.
314 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 311 buffer_size = static_cast<uint32_t>(sizeof(buffer));
315 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 312 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
316 mp0->ReadMessage(0, UserPointer<void>(buffer), 313 mp0->ReadMessage(0, UserPointer<void>(buffer),
(...skipping 19 matching lines...) Expand all
336 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 333 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
337 EXPECT_STREQ(kHello, buffer); 334 EXPECT_STREQ(kHello, buffer);
338 335
339 // Write: MP 0, port 0 -> MP 1, port 1 again. 336 // Write: MP 0, port 0 -> MP 1, port 1 again.
340 337
341 waiter.Init(); 338 waiter.Init();
342 ASSERT_EQ(MOJO_RESULT_OK, 339 ASSERT_EQ(MOJO_RESULT_OK,
343 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); 340 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123));
344 341
345 EXPECT_EQ(MOJO_RESULT_OK, 342 EXPECT_EQ(MOJO_RESULT_OK,
346 mp0->WriteMessage(0, 343 mp0->WriteMessage(0, UserPointer<const void>(kWorld),
347 kWorld, sizeof(kWorld), 344 sizeof(kWorld), NULL,
348 NULL,
349 MOJO_WRITE_MESSAGE_FLAG_NONE)); 345 MOJO_WRITE_MESSAGE_FLAG_NONE));
350 346
351 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 347 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
352 EXPECT_EQ(123u, context); 348 EXPECT_EQ(123u, context);
353 mp1->RemoveWaiter(1, &waiter); 349 mp1->RemoveWaiter(1, &waiter);
354 350
355 // Make sure there's nothing on the other ports. 351 // Make sure there's nothing on the other ports.
356 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 352 buffer_size = static_cast<uint32_t>(sizeof(buffer));
357 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 353 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
358 mp0->ReadMessage(0, UserPointer<void>(buffer), 354 mp0->ReadMessage(0, UserPointer<void>(buffer),
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 // Connect message pipes. MP 0, port 1 will be attached to channel 0 and 389 // Connect message pipes. MP 0, port 1 will be attached to channel 0 and
394 // connected to MP 1, port 0, which will be attached to channel 1. This leaves 390 // connected to MP 1, port 0, which will be attached to channel 1. This leaves
395 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints. 391 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints.
396 392
397 scoped_refptr<MessagePipe> mp0(new MessagePipe( 393 scoped_refptr<MessagePipe> mp0(new MessagePipe(
398 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()), 394 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()),
399 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()))); 395 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint())));
400 396
401 // Write to MP 0, port 0. 397 // Write to MP 0, port 0.
402 EXPECT_EQ(MOJO_RESULT_OK, 398 EXPECT_EQ(MOJO_RESULT_OK,
403 mp0->WriteMessage(0, 399 mp0->WriteMessage(0, UserPointer<const void>(kHello),
404 kHello, sizeof(kHello), 400 sizeof(kHello), NULL,
405 NULL,
406 MOJO_WRITE_MESSAGE_FLAG_NONE)); 401 MOJO_WRITE_MESSAGE_FLAG_NONE));
407 402
408 BootstrapMessagePipeNoWait(0, mp0); 403 BootstrapMessagePipeNoWait(0, mp0);
409 404
410 405
411 // Close MP 0, port 0 before channel 1 is even connected. 406 // Close MP 0, port 0 before channel 1 is even connected.
412 mp0->Close(0); 407 mp0->Close(0);
413 408
414 scoped_refptr<MessagePipe> mp1(new MessagePipe( 409 scoped_refptr<MessagePipe> mp1(new MessagePipe(
415 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()), 410 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()),
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 462
468 // Write to MP 0, port 0. 463 // Write to MP 0, port 0.
469 { 464 {
470 DispatcherTransport 465 DispatcherTransport
471 transport(test::DispatcherTryStartTransport(dispatcher.get())); 466 transport(test::DispatcherTryStartTransport(dispatcher.get()));
472 EXPECT_TRUE(transport.is_valid()); 467 EXPECT_TRUE(transport.is_valid());
473 468
474 std::vector<DispatcherTransport> transports; 469 std::vector<DispatcherTransport> transports;
475 transports.push_back(transport); 470 transports.push_back(transport);
476 EXPECT_EQ(MOJO_RESULT_OK, 471 EXPECT_EQ(MOJO_RESULT_OK,
477 mp0->WriteMessage(0, kHello, sizeof(kHello), &transports, 472 mp0->WriteMessage(0, UserPointer<const void>(kHello),
473 sizeof(kHello), &transports,
478 MOJO_WRITE_MESSAGE_FLAG_NONE)); 474 MOJO_WRITE_MESSAGE_FLAG_NONE));
479 transport.End(); 475 transport.End();
480 476
481 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 477 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
482 // |dispatcher| is destroyed. 478 // |dispatcher| is destroyed.
483 EXPECT_TRUE(dispatcher->HasOneRef()); 479 EXPECT_TRUE(dispatcher->HasOneRef());
484 dispatcher = NULL; 480 dispatcher = NULL;
485 } 481 }
486 482
487 // Wait. 483 // Wait.
(...skipping 21 matching lines...) Expand all
509 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); 505 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
510 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 506 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
511 507
512 // Add the waiter now, before it becomes readable to avoid a race. 508 // Add the waiter now, before it becomes readable to avoid a race.
513 waiter.Init(); 509 waiter.Init();
514 ASSERT_EQ(MOJO_RESULT_OK, 510 ASSERT_EQ(MOJO_RESULT_OK,
515 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); 511 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456));
516 512
517 // Write to "local_mp", port 1. 513 // Write to "local_mp", port 1.
518 EXPECT_EQ(MOJO_RESULT_OK, 514 EXPECT_EQ(MOJO_RESULT_OK,
519 local_mp->WriteMessage(1, kHello, sizeof(kHello), NULL, 515 local_mp->WriteMessage(1, UserPointer<const void>(kHello),
516 sizeof(kHello), NULL,
520 MOJO_WRITE_MESSAGE_FLAG_NONE)); 517 MOJO_WRITE_MESSAGE_FLAG_NONE));
521 518
522 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately 519 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately
523 // here. (We don't crash if I sleep and then close.) 520 // here. (We don't crash if I sleep and then close.)
524 521
525 // Wait for the dispatcher to become readable. 522 // Wait for the dispatcher to become readable.
526 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 523 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
527 EXPECT_EQ(456u, context); 524 EXPECT_EQ(456u, context);
528 dispatcher->RemoveWaiter(&waiter); 525 dispatcher->RemoveWaiter(&waiter);
529 526
530 // Read from the dispatcher. 527 // Read from the dispatcher.
531 memset(read_buffer, 0, sizeof(read_buffer)); 528 memset(read_buffer, 0, sizeof(read_buffer));
532 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 529 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
533 EXPECT_EQ(MOJO_RESULT_OK, 530 EXPECT_EQ(MOJO_RESULT_OK,
534 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 531 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
535 MakeUserPointer(&read_buffer_size), 0, NULL, 532 MakeUserPointer(&read_buffer_size), 0, NULL,
536 MOJO_READ_MESSAGE_FLAG_NONE)); 533 MOJO_READ_MESSAGE_FLAG_NONE));
537 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 534 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
538 EXPECT_STREQ(kHello, read_buffer); 535 EXPECT_STREQ(kHello, read_buffer);
539 536
540 // Prepare to wait on "local_mp", port 1. 537 // Prepare to wait on "local_mp", port 1.
541 waiter.Init(); 538 waiter.Init();
542 ASSERT_EQ(MOJO_RESULT_OK, 539 ASSERT_EQ(MOJO_RESULT_OK,
543 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); 540 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789));
544 541
545 // Write to the dispatcher. 542 // Write to the dispatcher.
546 EXPECT_EQ(MOJO_RESULT_OK, 543 EXPECT_EQ(MOJO_RESULT_OK,
547 dispatcher->WriteMessage(kHello, sizeof(kHello), NULL, 544 dispatcher->WriteMessage(UserPointer<const void>(kHello),
545 sizeof(kHello), NULL,
548 MOJO_WRITE_MESSAGE_FLAG_NONE)); 546 MOJO_WRITE_MESSAGE_FLAG_NONE));
549 547
550 // Wait. 548 // Wait.
551 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 549 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
552 EXPECT_EQ(789u, context); 550 EXPECT_EQ(789u, context);
553 local_mp->RemoveWaiter(1, &waiter); 551 local_mp->RemoveWaiter(1, &waiter);
554 552
555 // Read from "local_mp", port 1. 553 // Read from "local_mp", port 1.
556 memset(read_buffer, 0, sizeof(read_buffer)); 554 memset(read_buffer, 0, sizeof(read_buffer));
557 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 555 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 618
621 // Write to MP 0, port 0. 619 // Write to MP 0, port 0.
622 { 620 {
623 DispatcherTransport 621 DispatcherTransport
624 transport(test::DispatcherTryStartTransport(dispatcher.get())); 622 transport(test::DispatcherTryStartTransport(dispatcher.get()));
625 EXPECT_TRUE(transport.is_valid()); 623 EXPECT_TRUE(transport.is_valid());
626 624
627 std::vector<DispatcherTransport> transports; 625 std::vector<DispatcherTransport> transports;
628 transports.push_back(transport); 626 transports.push_back(transport);
629 EXPECT_EQ(MOJO_RESULT_OK, 627 EXPECT_EQ(MOJO_RESULT_OK,
630 mp0->WriteMessage(0, kHello, sizeof(kHello), &transports, 628 mp0->WriteMessage(0, UserPointer<const void>(kHello),
629 sizeof(kHello), &transports,
631 MOJO_WRITE_MESSAGE_FLAG_NONE)); 630 MOJO_WRITE_MESSAGE_FLAG_NONE));
632 transport.End(); 631 transport.End();
633 632
634 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 633 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
635 // |dispatcher| is destroyed. 634 // |dispatcher| is destroyed.
636 EXPECT_TRUE(dispatcher->HasOneRef()); 635 EXPECT_TRUE(dispatcher->HasOneRef());
637 dispatcher = NULL; 636 dispatcher = NULL;
638 } 637 }
639 638
640 // Wait. 639 // Wait.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 735
737 // Write to MP 0, port 0. 736 // Write to MP 0, port 0.
738 { 737 {
739 DispatcherTransport 738 DispatcherTransport
740 transport(test::DispatcherTryStartTransport(dispatcher.get())); 739 transport(test::DispatcherTryStartTransport(dispatcher.get()));
741 EXPECT_TRUE(transport.is_valid()); 740 EXPECT_TRUE(transport.is_valid());
742 741
743 std::vector<DispatcherTransport> transports; 742 std::vector<DispatcherTransport> transports;
744 transports.push_back(transport); 743 transports.push_back(transport);
745 EXPECT_EQ(MOJO_RESULT_OK, 744 EXPECT_EQ(MOJO_RESULT_OK,
746 mp0->WriteMessage(0, kWorld, sizeof(kWorld), &transports, 745 mp0->WriteMessage(0, UserPointer<const void>(kWorld),
746 sizeof(kWorld), &transports,
747 MOJO_WRITE_MESSAGE_FLAG_NONE)); 747 MOJO_WRITE_MESSAGE_FLAG_NONE));
748 transport.End(); 748 transport.End();
749 749
750 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 750 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
751 // |dispatcher| is destroyed. 751 // |dispatcher| is destroyed.
752 EXPECT_TRUE(dispatcher->HasOneRef()); 752 EXPECT_TRUE(dispatcher->HasOneRef());
753 dispatcher = NULL; 753 dispatcher = NULL;
754 } 754 }
755 755
756 // Wait. 756 // Wait.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 835
836 mp1->Close(1); 836 mp1->Close(1);
837 837
838 RestoreInitialState(); 838 RestoreInitialState();
839 } 839 }
840 } 840 }
841 841
842 } // namespace 842 } // namespace
843 } // namespace system 843 } // namespace system
844 } // namespace mojo 844 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698