[PATCH v2 5/5] ref-filter: use QSORT_S in ref_array_sort()
- From
René Scharfe <l.s.r@web.de>
- Date
- Jan 22, 2017, 17:58 UTC
- Message-ID
- <991872fc-dca6-566b-4e9f-d5b92e9ed8bf@web.de>
- In-Reply-To
- <67ac53cd-3fc0-8bd0-30f4-129281c3090f@web.de>
Pass the array of sort keys to compare_refs() via the context parameter of qsort_s() instead of using a global variable; that's cleaner and simpler. If ref_array_sort() is to be called from multiple parallel threads then care still needs to be taken that the global variable used_atom is not modified concurrently.
Signed-off-by: Rene Scharfe <l.s.r@web.de> --- ref-filter.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c index 1a978405e6..3975022c88 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1589,8 +1589,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru return (s->reverse) ? -cmp : cmp; } -static struct ref_sorting *ref_sorting; -static int compare_refs(const void *a_, const void *b_) +static int compare_refs(const void *a_, const void *b_, void *ref_sorting) { struct ref_array_item *a = *((struct ref_array_item **)a_); struct ref_array_item *b = *((struct ref_array_item **)b_); @@ -1606,8 +1605,7 @@ static int compare_refs(const void *a_, const void *b_) void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array) { - ref_sorting = sorting; - QSORT(array->items, array->nr, compare_refs); + QSORT_S(array->items, array->nr, compare_refs, sorting); } static void append_literal(const char *cp, const char *ep, struct ref_formatting_state *state)
-- 2.11.0