[ofa-general] [PATCH] opensm/osm_ucast_lash.c: Handle malloc failures better

Hal Rosenstock hnrose at comcast.net
Mon Jul 27 13:22:14 PDT 2009


Signed-off-by: Hal Rosenstock <hal.rosenstock at gmail.com>
---
diff --git a/opensm/opensm/osm_ucast_lash.c b/opensm/opensm/osm_ucast_lash.c
index 7133e25..a139bdb 100644
--- a/opensm/opensm/osm_ucast_lash.c
+++ b/opensm/opensm/osm_ucast_lash.c
@@ -296,8 +296,8 @@ static void shortest_path(lash_t * p_lash, int ir)
 	cl_list_destroy(&bfsq);
 }
 
-static void generate_routing_func_for_mst(lash_t * p_lash, int sw_id,
-					  reachable_dest_t ** destinations)
+static boolean_t generate_routing_func_for_mst(lash_t * p_lash, int sw_id,
+					       reachable_dest_t ** destinations)
 {
 	int i, next_switch;
 	switch_t *sw = p_lash->switches[sw_id];
@@ -306,7 +306,8 @@ static void generate_routing_func_for_mst(lash_t * p_lash, int sw_id,
 
 	for (i = 0; i < num_channels; i++) {
 		next_switch = sw->dij_channels[i];
-		generate_routing_func_for_mst(p_lash, next_switch, &dest);
+		if (!generate_routing_func_for_mst(p_lash, next_switch, &dest))
+			return FALSE;
 
 		i_dest = dest;
 		prev = i_dest;
@@ -327,9 +328,15 @@ static void generate_routing_func_for_mst(lash_t * p_lash, int sw_id,
 	}
 
 	i_dest = (reachable_dest_t *) malloc(sizeof(reachable_dest_t));
-	i_dest->switch_id = sw->id;
-	i_dest->next = concat_dest;
+	if (i_dest) {
+		i_dest->switch_id = sw->id;
+		i_dest->next = concat_dest;
+	}
 	*destinations = i_dest;
+	if (i_dest)
+		return TRUE;
+	else
+		return FALSE;
 }
 
 static void generate_cdg_for_sp(lash_t * p_lash, int sw, int dest_switch,
@@ -707,6 +714,8 @@ static int init_lash_structures(lash_t * p_lash)
 	/* initialise cdg_vertex_matrix[num_switches][num_switches][num_switches] */
 	p_lash->cdg_vertex_matrix =
 	    (cdg_vertex_t ****) malloc(vl_min * sizeof(cdg_vertex_t ****));
+	if (p_lash->cdg_vertex_matrix == NULL)
+		goto Exit_Mem_Error;
 	for (i = 0; i < vl_min; i++) {
 		p_lash->cdg_vertex_matrix[i] =
 		    (cdg_vertex_t ***) malloc(num_switches *
@@ -800,7 +809,11 @@ static int lash_core(lash_t * p_lash)
 	for (i = 0; i < num_switches; i++) {
 
 		shortest_path(p_lash, i);
-		generate_routing_func_for_mst(p_lash, i, &dests);
+		if (!generate_routing_func_for_mst(p_lash, i, &dests)) {
+			OSM_LOG(p_log, OSM_LOG_ERROR,
+				"generate_routing_func_for_mst failed\n");
+			goto Exit;
+		}
 
 		idest = dests;
 		while (idest != NULL) {



More information about the general mailing list