Ack, Not tested. Mathi. On Fri, Sep 14, 2018 at 3:33 PM Alex Jones <ajo...@rbbn.com> wrote:
> Jan 22 11:09:03 localhost osafplmd[3988]: Invocation id mentioned in the > resp, is not found in the grp->inocation_list. inv_id: 9 > > If multiple entities are part of the same entity group, and START or > VALIDATE > tracking is requested, if an admin operation is done on these entities, > once > one response is sent the other responses are ignored. But, the entities > that > didn't return a successful response all report "Admin operation can not be > performed" because they failed to process the tracking response. This is > because when the first invocation id is removed from the list, all the > others > are removed, too. Now those entities are stuck in this bad state. > > Fix the remove routines so that only the invocation in the response is > removed from the list. > --- > src/plm/plmd/plms_utils.c | 54 > ++++++++++++++++++++++++----------------------- > 1 file changed, 28 insertions(+), 26 deletions(-) > > diff --git a/src/plm/plmd/plms_utils.c b/src/plm/plmd/plms_utils.c > index 5637cdf08..5dbfdb28a 100644 > --- a/src/plm/plmd/plms_utils.c > +++ b/src/plm/plmd/plms_utils.c > @@ -1516,21 +1516,22 @@ void > plms_inv_to_trk_grp_add(PLMS_INVOCATION_TO_TRACK_INFO **list, > void plms_inv_to_cbk_in_grp_trk_rmv(PLMS_ENTITY_GROUP_INFO *grp, > PLMS_TRACK_INFO *trk_info) > { > - PLMS_INVOCATION_TO_TRACK_INFO **inv_list, **prev; > - > - inv_list = &(grp->invocation_list); > - prev = &(grp->invocation_list); > - while (*inv_list) { > - if (trk_info == (*inv_list)->track_info) { > - (*prev)->next = (*inv_list)->next; > - (*inv_list)->track_info = NULL; > - (*inv_list)->next = NULL; > - free(*inv_list); > - *inv_list = NULL; > + PLMS_INVOCATION_TO_TRACK_INFO *inv_list, *prev; > + > + inv_list = grp->invocation_list; > + prev = grp->invocation_list; > + while (inv_list) { > + if (trk_info == inv_list->track_info) { > + if (prev == inv_list) { > + /* this is the first entry */ > + grp->invocation_list = inv_list->next; > + } > + prev->next = inv_list->next; > + free(inv_list); > return; > } > - *prev = *inv_list; > - *inv_list = (*inv_list)->next; > + prev = inv_list; > + inv_list = inv_list->next; > } > > return; > @@ -1545,21 +1546,22 @@ void > plms_inv_to_cbk_in_grp_trk_rmv(PLMS_ENTITY_GROUP_INFO *grp, > void plms_inv_to_cbk_in_grp_inv_rmv(PLMS_ENTITY_GROUP_INFO *grp, > SaInvocationT inv_id) > { > - PLMS_INVOCATION_TO_TRACK_INFO **inv_list, **prev; > - > - inv_list = &(grp->invocation_list); > - prev = &(grp->invocation_list); > - while (*inv_list) { > - if (inv_id == (*inv_list)->invocation) { > - (*prev)->next = (*inv_list)->next; > - (*inv_list)->track_info = NULL; > - (*inv_list)->next = NULL; > - free(*inv_list); > - *inv_list = NULL; > + PLMS_INVOCATION_TO_TRACK_INFO *inv_list, *prev; > + > + inv_list = grp->invocation_list; > + prev = grp->invocation_list; > + while (inv_list) { > + if (inv_id == inv_list->invocation) { > + if (prev == inv_list) { > + /* this is the first entry */ > + grp->invocation_list = inv_list->next; > + } > + prev->next = inv_list->next; > + free(inv_list); > return; > } > - *prev = *inv_list; > - *inv_list = (*inv_list)->next; > + prev = inv_list; > + inv_list = inv_list->next; > } > > return; > -- > 2.14.4 > > _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel