[ofa-general] [PATCH] opensm/osm_sa_mcmember_record.c: bad return state when leaving mcast

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Mon Nov 17 04:56:28 PST 2008


Hi Sasha,

Re-fixing our recent fix in handling multicast leave.
When updating the state will cause port removal, port
object will be freed, so bad things will happen if we
try using it's state.

Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
---
 opensm/opensm/osm_sa_mcmember_record.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/opensm/opensm/osm_sa_mcmember_record.c b/opensm/opensm/osm_sa_mcmember_record.c
index 4e77f06..99aee1b 100644
--- a/opensm/opensm/osm_sa_mcmember_record.c
+++ b/opensm/opensm/osm_sa_mcmember_record.c
@@ -1085,10 +1085,14 @@ __osm_mcmr_rcv_leave_mgrp(IN osm_sa_t * sa,
 		goto Exit;
 	}

+	/* store state - we'll need it if the port is removed */
+	mcmember_rec.scope_state = p_mcm_port->scope_state;
+
 	/* remove port or update join state */
 	removed = osm_mgrp_remove_port(sa->p_subn, sa->p_log, p_mgrp, p_mcm_port,
 				       p_recvd_mcmember_rec->scope_state&0x0F);
-	mcmember_rec.scope_state = p_mcm_port->scope_state;
+	if (!removed)
+		mcmember_rec.scope_state = p_mcm_port->scope_state;

 	CL_PLOCK_RELEASE(sa->p_lock);

-- 
1.5.1.4



More information about the general mailing list