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

Side by Side Diff: mojo/edk/system/message_pipe_unittest.cc

Issue 2068483002: Add an unconditional version of DispatcherAddAwakable(): AddAwakableUnconditional(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: oops Created 4 years, 6 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "mojo/edk/system/message_pipe.h" 5 #include "mojo/edk/system/message_pipe.h"
6 6
7 #include "mojo/edk/system/waiter.h" 7 #include "mojo/edk/system/waiter.h"
8 #include "mojo/edk/system/waiter_test_utils.h" 8 #include "mojo/edk/system/waiter_test_utils.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 Waiter waiter; 326 Waiter waiter;
327 HandleSignalsState hss; 327 HandleSignalsState hss;
328 328
329 int32_t buffer[1]; 329 int32_t buffer[1];
330 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 330 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
331 uint32_t buffer_size; 331 uint32_t buffer_size;
332 332
333 // Always writable (until the other port is closed). 333 // Always writable (until the other port is closed).
334 waiter.Init(); 334 waiter.Init();
335 hss = HandleSignalsState(); 335 hss = HandleSignalsState();
336 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 336 EXPECT_EQ(
337 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss)); 337 MOJO_RESULT_ALREADY_EXISTS,
338 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, false, 0, &hss));
338 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 339 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
339 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 340 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
340 waiter.Init(); 341 waiter.Init();
341 hss = HandleSignalsState(); 342 hss = HandleSignalsState();
342 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 343 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
343 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE | 344 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE |
344 MOJO_HANDLE_SIGNAL_WRITABLE, 345 MOJO_HANDLE_SIGNAL_WRITABLE,
345 0, &hss)); 346 false, 0, &hss));
346 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 347 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
347 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 348 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
348 349
349 // Not yet readable. 350 // Not yet readable.
350 waiter.Init(); 351 waiter.Init();
351 ASSERT_EQ( 352 ASSERT_EQ(MOJO_RESULT_OK,
352 MOJO_RESULT_OK, 353 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 1,
353 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 1, nullptr)); 354 nullptr));
354 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr)); 355 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr));
355 hss = HandleSignalsState(); 356 hss = HandleSignalsState();
356 mp->RemoveAwakable(0, &waiter, &hss); 357 mp->RemoveAwakable(0, &waiter, &hss);
357 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 358 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
358 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 359 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
359 360
360 // The peer is not closed. 361 // The peer is not closed.
361 waiter.Init(); 362 waiter.Init();
362 ASSERT_EQ( 363 ASSERT_EQ(MOJO_RESULT_OK,
363 MOJO_RESULT_OK, 364 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, false,
364 mp->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 2, nullptr)); 365 2, nullptr));
365 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr)); 366 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, nullptr));
366 hss = HandleSignalsState(); 367 hss = HandleSignalsState();
367 mp->RemoveAwakable(0, &waiter, &hss); 368 mp->RemoveAwakable(0, &waiter, &hss);
368 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 369 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
369 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 370 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
370 371
371 // Write from port 0 (to port 1), to make port 1 readable. 372 // Write from port 0 (to port 1), to make port 1 readable.
372 buffer[0] = 123456789; 373 buffer[0] = 123456789;
373 EXPECT_EQ(MOJO_RESULT_OK, 374 EXPECT_EQ(MOJO_RESULT_OK,
374 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, 375 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize,
375 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 376 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
376 377
377 // Port 1 should already be readable now. 378 // Port 1 should already be readable now.
378 waiter.Init(); 379 waiter.Init();
379 hss = HandleSignalsState(); 380 hss = HandleSignalsState();
380 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 381 EXPECT_EQ(
381 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 3, &hss)); 382 MOJO_RESULT_ALREADY_EXISTS,
383 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 3, &hss));
382 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 384 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
383 hss.satisfied_signals); 385 hss.satisfied_signals);
384 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 386 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
385 waiter.Init(); 387 waiter.Init();
386 hss = HandleSignalsState(); 388 hss = HandleSignalsState();
387 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 389 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
388 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE | 390 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE |
389 MOJO_HANDLE_SIGNAL_WRITABLE, 391 MOJO_HANDLE_SIGNAL_WRITABLE,
390 0, &hss)); 392 false, 0, &hss));
391 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 393 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
392 hss.satisfied_signals); 394 hss.satisfied_signals);
393 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 395 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
394 // ... and still writable. 396 // ... and still writable.
395 waiter.Init(); 397 waiter.Init();
396 hss = HandleSignalsState(); 398 hss = HandleSignalsState();
397 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 399 EXPECT_EQ(
398 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 4, &hss)); 400 MOJO_RESULT_ALREADY_EXISTS,
401 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, false, 4, &hss));
399 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 402 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
400 hss.satisfied_signals); 403 hss.satisfied_signals);
401 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 404 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
402 405
403 // Close port 0. 406 // Close port 0.
404 mp->Close(0); 407 mp->Close(0);
405 408
406 // Port 1 should be signaled with peer closed. 409 // Port 1 should be signaled with peer closed.
407 waiter.Init(); 410 waiter.Init();
408 hss = HandleSignalsState(); 411 hss = HandleSignalsState();
409 EXPECT_EQ( 412 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
410 MOJO_RESULT_ALREADY_EXISTS, 413 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, false,
411 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 5, &hss)); 414 5, &hss));
412 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 415 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
413 hss.satisfied_signals); 416 hss.satisfied_signals);
414 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 417 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
415 hss.satisfiable_signals); 418 hss.satisfiable_signals);
416 419
417 // Port 1 should not be writable. 420 // Port 1 should not be writable.
418 waiter.Init(); 421 waiter.Init();
419 hss = HandleSignalsState(); 422 hss = HandleSignalsState();
420 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 423 EXPECT_EQ(
421 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6, &hss)); 424 MOJO_RESULT_FAILED_PRECONDITION,
425 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_WRITABLE, false, 6, &hss));
422 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 426 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
423 hss.satisfied_signals); 427 hss.satisfied_signals);
424 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 428 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
425 hss.satisfiable_signals); 429 hss.satisfiable_signals);
426 430
427 // But it should still be readable. 431 // But it should still be readable.
428 waiter.Init(); 432 waiter.Init();
429 hss = HandleSignalsState(); 433 hss = HandleSignalsState();
430 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 434 EXPECT_EQ(
431 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 7, &hss)); 435 MOJO_RESULT_ALREADY_EXISTS,
436 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 7, &hss));
432 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 437 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
433 hss.satisfied_signals); 438 hss.satisfied_signals);
434 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 439 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
435 hss.satisfiable_signals); 440 hss.satisfiable_signals);
436 441
437 // Read from port 1. 442 // Read from port 1.
438 buffer[0] = 0; 443 buffer[0] = 0;
439 buffer_size = kBufferSize; 444 buffer_size = kBufferSize;
440 EXPECT_EQ(MOJO_RESULT_OK, 445 EXPECT_EQ(MOJO_RESULT_OK,
441 mp->ReadMessage(1, UserPointer<void>(buffer), 446 mp->ReadMessage(1, UserPointer<void>(buffer),
442 MakeUserPointer(&buffer_size), 0, nullptr, 447 MakeUserPointer(&buffer_size), 0, nullptr,
443 MOJO_READ_MESSAGE_FLAG_NONE)); 448 MOJO_READ_MESSAGE_FLAG_NONE));
444 EXPECT_EQ(123456789, buffer[0]); 449 EXPECT_EQ(123456789, buffer[0]);
445 450
446 // Now port 1 should no longer be readable. 451 // Now port 1 should no longer be readable.
447 waiter.Init(); 452 waiter.Init();
448 hss = HandleSignalsState(); 453 hss = HandleSignalsState();
449 EXPECT_EQ( 454 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
450 MOJO_RESULT_FAILED_PRECONDITION, 455 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 8,
451 mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 8, nullptr)); 456 nullptr));
452 EXPECT_EQ(0u, hss.satisfied_signals); 457 EXPECT_EQ(0u, hss.satisfied_signals);
453 EXPECT_EQ(0u, hss.satisfiable_signals); 458 EXPECT_EQ(0u, hss.satisfiable_signals);
454 459
455 mp->Close(1); 460 mp->Close(1);
456 } 461 }
457 462
458 TEST(MessagePipeTest, ThreadedWaiting) { 463 TEST(MessagePipeTest, ThreadedWaiting) {
459 int32_t buffer[1]; 464 int32_t buffer[1];
460 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 465 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
461 466
462 MojoResult result; 467 MojoResult result;
463 uint64_t context; 468 uint64_t context;
464 469
465 // Write to wake up waiter waiting for read. 470 // Write to wake up waiter waiting for read.
466 { 471 {
467 auto mp = MessagePipe::CreateLocalLocal(); 472 auto mp = MessagePipe::CreateLocalLocal();
468 test::SimpleWaiterThread thread(&result, &context); 473 test::SimpleWaiterThread thread(&result, &context);
469 474
470 thread.waiter()->Init(); 475 thread.waiter()->Init();
471 ASSERT_EQ(MOJO_RESULT_OK, 476 ASSERT_EQ(MOJO_RESULT_OK,
472 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 477 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE,
473 1, nullptr)); 478 false, 1, nullptr));
474 thread.Start(); 479 thread.Start();
475 480
476 buffer[0] = 123456789; 481 buffer[0] = 123456789;
477 // Write from port 0 (to port 1), which should wake up the waiter. 482 // Write from port 0 (to port 1), which should wake up the waiter.
478 EXPECT_EQ(MOJO_RESULT_OK, 483 EXPECT_EQ(MOJO_RESULT_OK,
479 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, 484 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize,
480 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 485 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
481 486
482 HandleSignalsState hss; 487 HandleSignalsState hss;
483 mp->RemoveAwakable(1, thread.waiter(), &hss); 488 mp->RemoveAwakable(1, thread.waiter(), &hss);
484 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 489 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
485 hss.satisfied_signals); 490 hss.satisfied_signals);
486 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 491 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
487 492
488 mp->Close(0); 493 mp->Close(0);
489 mp->Close(1); 494 mp->Close(1);
490 } // Joins |thread|. 495 } // Joins |thread|.
491 // The waiter should have woken up successfully. 496 // The waiter should have woken up successfully.
492 EXPECT_EQ(MOJO_RESULT_OK, result); 497 EXPECT_EQ(MOJO_RESULT_OK, result);
493 EXPECT_EQ(1u, context); 498 EXPECT_EQ(1u, context);
494 499
495 // Close to cancel waiter. 500 // Close to cancel waiter.
496 { 501 {
497 auto mp = MessagePipe::CreateLocalLocal(); 502 auto mp = MessagePipe::CreateLocalLocal();
498 test::SimpleWaiterThread thread(&result, &context); 503 test::SimpleWaiterThread thread(&result, &context);
499 504
500 thread.waiter()->Init(); 505 thread.waiter()->Init();
501 ASSERT_EQ(MOJO_RESULT_OK, 506 ASSERT_EQ(MOJO_RESULT_OK,
502 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 507 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE,
503 2, nullptr)); 508 false, 2, nullptr));
504 thread.Start(); 509 thread.Start();
505 510
506 // Close port 1 first -- this should result in the waiter being cancelled. 511 // Close port 1 first -- this should result in the waiter being cancelled.
507 mp->CancelAllState(1); 512 mp->CancelAllState(1);
508 mp->Close(1); 513 mp->Close(1);
509 514
510 // Port 1 is closed, so |Dispatcher::RemoveAwakable()| wouldn't call into 515 // Port 1 is closed, so |Dispatcher::RemoveAwakable()| wouldn't call into
511 // the |MessagePipe| to remove any waiter. 516 // the |MessagePipe| to remove any waiter.
512 517
513 mp->Close(0); 518 mp->Close(0);
514 } // Joins |thread|. 519 } // Joins |thread|.
515 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 520 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
516 EXPECT_EQ(2u, context); 521 EXPECT_EQ(2u, context);
517 522
518 // Close to cancel waiter using peer closed signal. 523 // Close to cancel waiter using peer closed signal.
519 { 524 {
520 auto mp = MessagePipe::CreateLocalLocal(); 525 auto mp = MessagePipe::CreateLocalLocal();
521 test::SimpleWaiterThread thread(&result, &context); 526 test::SimpleWaiterThread thread(&result, &context);
522 527
523 thread.waiter()->Init(); 528 thread.waiter()->Init();
524 ASSERT_EQ(MOJO_RESULT_OK, 529 ASSERT_EQ(MOJO_RESULT_OK, mp->AddAwakable(1, thread.waiter(),
525 mp->AddAwakable(1, thread.waiter(), 530 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
526 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 3, nullptr)); 531 false, 3, nullptr));
527 thread.Start(); 532 thread.Start();
528 533
529 // Close port 1 first -- this should result in the waiter being cancelled. 534 // Close port 1 first -- this should result in the waiter being cancelled.
530 mp->CancelAllState(1); 535 mp->CancelAllState(1);
531 mp->Close(1); 536 mp->Close(1);
532 537
533 // Port 1 is closed, so |Dispatcher::RemoveAwakable()| wouldn't call into 538 // Port 1 is closed, so |Dispatcher::RemoveAwakable()| wouldn't call into
534 // the |MessagePipe| to remove any waiter. 539 // the |MessagePipe| to remove any waiter.
535 540
536 mp->Close(0); 541 mp->Close(0);
537 } // Joins |thread|. 542 } // Joins |thread|.
538 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 543 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
539 EXPECT_EQ(3u, context); 544 EXPECT_EQ(3u, context);
540 545
541 // Close to make waiter un-wake-up-able. 546 // Close to make waiter un-wake-up-able.
542 { 547 {
543 auto mp = MessagePipe::CreateLocalLocal(); 548 auto mp = MessagePipe::CreateLocalLocal();
544 test::SimpleWaiterThread thread(&result, &context); 549 test::SimpleWaiterThread thread(&result, &context);
545 550
546 thread.waiter()->Init(); 551 thread.waiter()->Init();
547 ASSERT_EQ(MOJO_RESULT_OK, 552 ASSERT_EQ(MOJO_RESULT_OK,
548 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 553 mp->AddAwakable(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE,
549 4, nullptr)); 554 false, 4, nullptr));
550 thread.Start(); 555 thread.Start();
551 556
552 // Close port 0 first -- this should wake the waiter up, since port 1 will 557 // Close port 0 first -- this should wake the waiter up, since port 1 will
553 // never be readable. 558 // never be readable.
554 mp->CancelAllState(0); 559 mp->CancelAllState(0);
555 mp->Close(0); 560 mp->Close(0);
556 561
557 HandleSignalsState hss; 562 HandleSignalsState hss;
558 mp->RemoveAwakable(1, thread.waiter(), &hss); 563 mp->RemoveAwakable(1, thread.waiter(), &hss);
559 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 564 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
560 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 565 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
561 566
562 mp->CancelAllState(1); 567 mp->CancelAllState(1);
563 mp->Close(1); 568 mp->Close(1);
564 } // Joins |thread|. 569 } // Joins |thread|.
565 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 570 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
566 EXPECT_EQ(4u, context); 571 EXPECT_EQ(4u, context);
567 } 572 }
568 573
569 } // namespace 574 } // namespace
570 } // namespace system 575 } // namespace system
571 } // namespace mojo 576 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/message_pipe_test_utils.cc ('k') | mojo/edk/system/remote_data_pipe_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698