Some more fixes related to ptr/weak_ptr
This commit is contained in:
parent
244341b5cf
commit
3ba2e7797b
2
Makefile
2
Makefile
@ -1,5 +1,3 @@
|
|||||||
DEBUG=1
|
|
||||||
|
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
CXXFLAGS ?= -g -DDEBUG
|
CXXFLAGS ?= -g -DDEBUG
|
||||||
else
|
else
|
||||||
|
@ -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)) {
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user