Some more fixes related to ptr/weak_ptr
This commit is contained in:
parent
244341b5cf
commit
3ba2e7797b
@ -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)) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user