From ce74bc88a505e2b27898509d25ca952843f77163 Mon Sep 17 00:00:00 2001 From: Nipa Kumar Date: Tue, 10 May 2016 16:01:32 -0700 Subject: [PATCH] Add mutual exclusion on Agent between xmpp::StateMachine and io::ReaderTask. TCP close event on a session is handled by xmpp::StateMachine task and reads handled by io::ReaderTask, hence both tasks can be accessing the same session at the same time and xmpp::StateMachine destroying the session while io::ReaderTask reading it. Change-Id: I09fbdf9b9ea6c31fb6072e7e2f8d40510f32dc03 Closes-Bug:1560242 --- src/vnsw/agent/cmn/agent.cc | 6 ++++++ src/xmpp/xmpp_session.cc | 4 ---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vnsw/agent/cmn/agent.cc b/src/vnsw/agent/cmn/agent.cc index 6b4232f8a72..58e4e0a04ad 100644 --- a/src/vnsw/agent/cmn/agent.cc +++ b/src/vnsw/agent/cmn/agent.cc @@ -205,6 +205,12 @@ void Agent::SetAgentTaskPolicy() { SetTaskPolicyOne("http client", metadata_exclude_list, sizeof(metadata_exclude_list) / sizeof(char *)); + const char *xmpp_state_machine_exclude_list[] = { + "io::ReaderTask" + }; + SetTaskPolicyOne("xmpp::StateMachine", xmpp_state_machine_exclude_list, + sizeof(xmpp_state_machine_exclude_list) / sizeof(char *)); + const char *agent_init_exclude_list[] = { "xmpp::StateMachine", "http client", diff --git a/src/xmpp/xmpp_session.cc b/src/xmpp/xmpp_session.cc index b650988d220..92b0a65972a 100644 --- a/src/xmpp/xmpp_session.cc +++ b/src/xmpp/xmpp_session.cc @@ -287,10 +287,6 @@ void XmppSession::OnRead(Buffer buffer) { std::string::const_iterator st = buf_.begin(); std::string xml = string(st, offset_); - // - // XXX Connection gone ? - // - if (!connection_) break; connection_->ReceiveMsg(this, xml); } else {