Some more fixes related to ptr/weak_ptr

This commit is contained in:
Daniel Adolfsson 2012-02-04 11:01:25 +01:00
parent 244341b5cf
commit 3ba2e7797b
4 changed files with 12 additions and 21 deletions

View File

@ -1,5 +1,3 @@
DEBUG=1
ifdef DEBUG
CXXFLAGS ?= -g -DDEBUG
else

View File

@ -479,7 +479,7 @@ void iface::fixup_pollfds()
void iface::remove_session(const ptr<session>& se)
{
for (std::list<ptr<session> >::iterator it = _sessions.begin();
for (std::list<weak_ptr<session> >::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<ptr<session> >::iterator s_it = ifa->_sessions.begin();
for (std::list<weak_ptr<session> >::iterator s_it = ifa->_sessions.begin();
s_it != ifa->_sessions.end(); s_it++) {
assert(!s_it->is_null());
const ptr<session> sess = *s_it;
if ((sess->taddr() == taddr) && (sess->status() == session::WAITING)) {

View File

@ -102,7 +102,7 @@ private:
// An array of sessions that are monitoring this interface for
// ND_NEIGHBOR_ADVERT messages.
std::list<ptr<session> > _sessions;
std::list<weak_ptr<session> > _sessions;
weak_ptr<proxy> _pr;

View File

@ -27,13 +27,13 @@ std::list<weak_ptr<session> > session::_sessions;
void session::update_all(int elapsed_time)
{
for (std::list<weak_ptr<session> >::iterator it = _sessions.begin();
it != _sessions.end(); it++) {
it != _sessions.end(); ) {
if (!*it) {
_sessions.erase(it);
_sessions.erase(it++);
continue;
}
ptr<session> se = *it;
ptr<session> 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<ptr<iface> >::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<weak_ptr<session> >::iterator it = _sessions.begin();
it != _sessions.end(); it++) {
if (*it == _ptr) {
_sessions.erase(it);
break;
}
}*/
for (std::list<ptr<iface> >::iterator it = _ifaces.begin();
it != _ifaces.end(); it++) {
(*it)->remove_session(_ptr);
}
}
ptr<session> session::create(const ptr<proxy>& pr, const address& saddr,