On Sun, May 11, 2014 at 11:55:01PM -0700, Jarno Rajahalme wrote: > Array splicing was broken when multiple elements were being moved, > resulting in the priority order being mixed. This came up when the > highest priority rule from a subtable was removed and the subtable > needed to be moved down the priority list by more than one position. > > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
Can you explain what this function does? I feel like it should be obvious (I mean, clearly it's reordering the array), but in fact I'm having trouble puzzling it out. > diff --git a/lib/classifier.c b/lib/classifier.c > index a9046cd..aef57bb 100644 > --- a/lib/classifier.c > +++ b/lib/classifier.c > @@ -224,12 +224,14 @@ cls_subtable_cache_splice(struct cls_subtable_entry *to, > to = start; start = end; end = temp; > } > if (to < start) { > + /* Move elements [start, end) to (to) one by one. */ > while (start != end) { > struct cls_subtable_entry temp = *start; > > + /* Shift array by one, making space for the element at 'temp'. */ > memmove(to + 1, to, (start - to) * sizeof *to); > *to = temp; > - start++; > + start++; to++; > } > } /* Else nothing to be done. */ > } > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev