From 4303b102a6b612ce1a9dd9f442c8b713e3aeb81b 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 46cf909e65d..ff626936412 100644 --- a/src/vnsw/agent/cmn/agent.cc +++ b/src/vnsw/agent/cmn/agent.cc @@ -204,6 +204,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 d2f15da35c1..3ae5514d853 100644 --- a/src/xmpp/xmpp_session.cc +++ b/src/xmpp/xmpp_session.cc @@ -283,10 +283,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 {