diff --git a/src/lib/dhcp/iface_mgr.cc b/src/lib/dhcp/iface_mgr.cc index 70561ba3bc..2e34f30688 100644 --- a/src/lib/dhcp/iface_mgr.cc +++ b/src/lib/dhcp/iface_mgr.cc @@ -880,14 +880,13 @@ IfaceMgr::send(const Pkt4Ptr& pkt) { } -boost::shared_ptr -IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */) { +Pkt4Ptr IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */) { // Sanity check for microsecond timeout. if (timeout_usec >= 1000000) { isc_throw(BadValue, "fractional timeout must be shorter than" " one million microseconds"); } - const SocketInfo* candidate = 0; + boost::scoped_ptr candidate; IfacePtr iface; fd_set sockets; int maxfd = 0; @@ -972,7 +971,7 @@ IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */) { BOOST_FOREACH(iface, ifaces_) { BOOST_FOREACH(SocketInfo s, iface->getSockets()) { if (FD_ISSET(s.sockfd_, &sockets)) { - candidate = &(s); + candidate.reset(new SocketInfo(s)); break; } } @@ -997,7 +996,7 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */ " one million microseconds"); } - const SocketInfo* candidate = 0; + boost::scoped_ptr candidate; fd_set sockets; int maxfd = 0; @@ -1082,7 +1081,7 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */ BOOST_FOREACH(IfacePtr iface, ifaces_) { BOOST_FOREACH(SocketInfo s, iface->getSockets()) { if (FD_ISSET(s.sockfd_, &sockets)) { - candidate = &(s); + candidate.reset(new SocketInfo(s)); break; } } diff --git a/src/lib/dhcp/tests/iface_mgr_unittest.cc b/src/lib/dhcp/tests/iface_mgr_unittest.cc index efd21df6a5..5136a10ed3 100644 --- a/src/lib/dhcp/tests/iface_mgr_unittest.cc +++ b/src/lib/dhcp/tests/iface_mgr_unittest.cc @@ -2833,15 +2833,17 @@ TEST_F(IfaceMgrTest, unicastDuplicates) { NakedIfaceMgr ifacemgr; IfacePtr iface = ifacemgr.getIface(LOOPBACK); - if (iface) { + if (!iface) { cout << "Local loopback interface not found. Skipping test. " << endl; return; } // Tell the interface that it should bind to this global interface + // It is the first attempt so it should succeed EXPECT_NO_THROW(iface->addUnicast(IOAddress("2001:db8::1"))); // Tell the interface that it should bind to this global interface + // It is the second attempt so it should fail EXPECT_THROW(iface->addUnicast(IOAddress("2001:db8::1")), BadValue); }