Ack, Not tested.
Mathi.
On Fri, Sep 14, 2018 at 3:33 PM Alex Jones <[email protected]> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel