| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/eintr_wrapper.h" | 5 #include "base/eintr_wrapper.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/platform_thread.h" | 8 #include "base/platform_thread.h" |
| 9 #include "base/ref_counted.h" | 9 #include "base/ref_counted.h" |
| 10 #include "base/task.h" | 10 #include "base/task.h" |
| (...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1571 base::MessagePumpLibevent::FileDescriptorWatcher controller; | 1571 base::MessagePumpLibevent::FileDescriptorWatcher controller; |
| 1572 { | 1572 { |
| 1573 MessageLoopForIO message_loop; | 1573 MessageLoopForIO message_loop; |
| 1574 | 1574 |
| 1575 QuitDelegate delegate; | 1575 QuitDelegate delegate; |
| 1576 message_loop.WatchFileDescriptor(fd, | 1576 message_loop.WatchFileDescriptor(fd, |
| 1577 true, MessageLoopForIO::WATCH_WRITE, &controller, &delegate); | 1577 true, MessageLoopForIO::WATCH_WRITE, &controller, &delegate); |
| 1578 // and don't run the message loop, just destroy it. | 1578 // and don't run the message loop, just destroy it. |
| 1579 } | 1579 } |
| 1580 } | 1580 } |
| 1581 HANDLE_EINTR(close(pipefds[0])); | 1581 if (HANDLE_EINTR(close(pipefds[0])) < 0) |
| 1582 HANDLE_EINTR(close(pipefds[1])); | 1582 PLOG(ERROR) << "close"; |
| 1583 if (HANDLE_EINTR(close(pipefds[1])) < 0) |
| 1584 PLOG(ERROR) << "close"; |
| 1583 } | 1585 } |
| 1584 | 1586 |
| 1585 TEST(MessageLoopTest, FileDescriptorWatcherDoubleStop) { | 1587 TEST(MessageLoopTest, FileDescriptorWatcherDoubleStop) { |
| 1586 // Verify that it's ok to call StopWatchingFileDescriptor(). | 1588 // Verify that it's ok to call StopWatchingFileDescriptor(). |
| 1587 // (Errors only showed up in valgrind.) | 1589 // (Errors only showed up in valgrind.) |
| 1588 int pipefds[2]; | 1590 int pipefds[2]; |
| 1589 int err = pipe(pipefds); | 1591 int err = pipe(pipefds); |
| 1590 ASSERT_TRUE(err == 0); | 1592 ASSERT_TRUE(err == 0); |
| 1591 int fd = pipefds[1]; | 1593 int fd = pipefds[1]; |
| 1592 { | 1594 { |
| 1593 // Arrange for message loop to live longer than controller. | 1595 // Arrange for message loop to live longer than controller. |
| 1594 MessageLoopForIO message_loop; | 1596 MessageLoopForIO message_loop; |
| 1595 { | 1597 { |
| 1596 base::MessagePumpLibevent::FileDescriptorWatcher controller; | 1598 base::MessagePumpLibevent::FileDescriptorWatcher controller; |
| 1597 | 1599 |
| 1598 QuitDelegate delegate; | 1600 QuitDelegate delegate; |
| 1599 message_loop.WatchFileDescriptor(fd, | 1601 message_loop.WatchFileDescriptor(fd, |
| 1600 true, MessageLoopForIO::WATCH_WRITE, &controller, &delegate); | 1602 true, MessageLoopForIO::WATCH_WRITE, &controller, &delegate); |
| 1601 controller.StopWatchingFileDescriptor(); | 1603 controller.StopWatchingFileDescriptor(); |
| 1602 } | 1604 } |
| 1603 } | 1605 } |
| 1604 HANDLE_EINTR(close(pipefds[0])); | 1606 if (HANDLE_EINTR(close(pipefds[0])) < 0) |
| 1605 HANDLE_EINTR(close(pipefds[1])); | 1607 PLOG(ERROR) << "close"; |
| 1608 if (HANDLE_EINTR(close(pipefds[1])) < 0) |
| 1609 PLOG(ERROR) << "close"; |
| 1606 } | 1610 } |
| 1607 | 1611 |
| 1608 } // namespace | 1612 } // namespace |
| 1609 | 1613 |
| 1610 #endif // defined(OS_POSIX) | 1614 #endif // defined(OS_POSIX) |
| OLD | NEW |