From 3ba2e7797b96ad52158d8871c6b96da9abbe757a Mon Sep 17 00:00:00 2001 From: Daniel Adolfsson Date: Sat, 4 Feb 2012 11:01:25 +0100 Subject: [PATCH] Some more fixes related to ptr/weak_ptr --- Makefile | 2 -- src/iface.cc | 6 ++++-- src/iface.h | 2 +- src/session.cc | 23 +++++++---------------- 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index de0d737..2263f78 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,3 @@ -DEBUG=1 - ifdef DEBUG CXXFLAGS ?= -g -DDEBUG else diff --git a/src/iface.cc b/src/iface.cc index 2ba016c..afce06f 100644 --- a/src/iface.cc +++ b/src/iface.cc @@ -479,7 +479,7 @@ void iface::fixup_pollfds() void iface::remove_session(const ptr& se) { - for (std::list >::iterator it = _sessions.begin(); + for (std::list >::iterator it = _sessions.begin(); it != _sessions.end(); it++) { if (*it == se) { _sessions.erase(it); @@ -569,8 +569,10 @@ int iface::poll_all() continue; } - for (std::list >::iterator s_it = ifa->_sessions.begin(); + for (std::list >::iterator s_it = ifa->_sessions.begin(); s_it != ifa->_sessions.end(); s_it++) { + assert(!s_it->is_null()); + const ptr sess = *s_it; if ((sess->taddr() == taddr) && (sess->status() == session::WAITING)) { diff --git a/src/iface.h b/src/iface.h index 904ec5f..be4f050 100644 --- a/src/iface.h +++ b/src/iface.h @@ -102,7 +102,7 @@ private: // An array of sessions that are monitoring this interface for // ND_NEIGHBOR_ADVERT messages. - std::list > _sessions; + std::list > _sessions; weak_ptr _pr; diff --git a/src/session.cc b/src/session.cc index 53d06d5..2c3e65c 100644 --- a/src/session.cc +++ b/src/session.cc @@ -27,13 +27,13 @@ std::list > session::_sessions; void session::update_all(int elapsed_time) { for (std::list >::iterator it = _sessions.begin(); - it != _sessions.end(); it++) { + it != _sessions.end(); ) { if (!*it) { - _sessions.erase(it); + _sessions.erase(it++); continue; } - ptr se = *it; + ptr se = *it++; if ((se->_ttl -= elapsed_time) >= 0) { continue; @@ -48,12 +48,6 @@ void session::update_all(int elapsed_time) default: se->_pr->remove_session(se); - - - for (std::list >::iterator it = se->_ifaces.begin(); - it != se->_ifaces.end(); it++) { - (*it)->remove_session(se); - } } } } @@ -62,13 +56,10 @@ session::~session() { logger::debug() << "session::~session() this=" << logger::format("%x", this); - /*for (std::list >::iterator it = _sessions.begin(); - it != _sessions.end(); it++) { - if (*it == _ptr) { - _sessions.erase(it); - break; - } - }*/ + for (std::list >::iterator it = _ifaces.begin(); + it != _ifaces.end(); it++) { + (*it)->remove_session(_ptr); + } } ptr session::create(const ptr& pr, const address& saddr,