[ofa-general] Re: [PATCH] opensm/osm_ucast_lash.c: Handle malloc failures better
Sasha Khapyorsky
sashak at voltaire.com
Thu Jul 30 02:33:04 PDT 2009
Hi Hal,
On 16:22 Mon 27 Jul , Hal Rosenstock wrote:
>
> 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)
I think that 'int' is more suitable and simpler for using as return
status value.
> {
> 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;
BTW, it looks like a BFS. Could recursion be avoided here?
>
> 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;
> }
And then:
i_dest = malloc(sizeof(reachable_dest_t));
if (!i_dest)
return -1;
, that's all.
Sasha
More information about the general
mailing list