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 ifdef DEBUG
CXXFLAGS ?= -g -DDEBUG CXXFLAGS ?= -g -DDEBUG
else else

View File

@ -479,7 +479,7 @@ void iface::fixup_pollfds()
void iface::remove_session(const ptr<session>& se) 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++) { it != _sessions.end(); it++) {
if (*it == se) { if (*it == se) {
_sessions.erase(it); _sessions.erase(it);
@ -569,8 +569,10 @@ int iface::poll_all()
continue; 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++) { s_it != ifa->_sessions.end(); s_it++) {
assert(!s_it->is_null());
const ptr<session> sess = *s_it; const ptr<session> sess = *s_it;
if ((sess->taddr() == taddr) && (sess->status() == session::WAITING)) { 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 // An array of sessions that are monitoring this interface for
// ND_NEIGHBOR_ADVERT messages. // ND_NEIGHBOR_ADVERT messages.
std::list<ptr<session> > _sessions; std::list<weak_ptr<session> > _sessions;
weak_ptr<proxy> _pr; weak_ptr<proxy> _pr;

View File

@ -27,13 +27,13 @@ std::list<weak_ptr<session> > session::_sessions;
void session::update_all(int elapsed_time) void session::update_all(int elapsed_time)
{ {
for (std::list<weak_ptr<session> >::iterator it = _sessions.begin(); for (std::list<weak_ptr<session> >::iterator it = _sessions.begin();
it != _sessions.end(); it++) { it != _sessions.end(); ) {
if (!*it) { if (!*it) {
_sessions.erase(it); _sessions.erase(it++);
continue; continue;
} }
ptr<session> se = *it; ptr<session> se = *it++;
if ((se->_ttl -= elapsed_time) >= 0) { if ((se->_ttl -= elapsed_time) >= 0) {
continue; continue;
@ -48,12 +48,6 @@ void session::update_all(int elapsed_time)
default: default:
se->_pr->remove_session(se); 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); logger::debug() << "session::~session() this=" << logger::format("%x", this);
/*for (std::list<weak_ptr<session> >::iterator it = _sessions.begin(); for (std::list<ptr<iface> >::iterator it = _ifaces.begin();
it != _sessions.end(); it++) { it != _ifaces.end(); it++) {
if (*it == _ptr) { (*it)->remove_session(_ptr);
_sessions.erase(it); }
break;
}
}*/
} }
ptr<session> session::create(const ptr<proxy>& pr, const address& saddr, ptr<session> session::create(const ptr<proxy>& pr, const address& saddr,