OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |