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

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

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