From e378f82e0029a7a6fda9c655bd79d4404e566c0b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 5 Oct 2006 17:57:40 +0000 Subject: Make use of qsort_arg in several places that were formerly using klugy static variables. This avoids any risk of potential non-reentrancy, and in particular offers a much cleaner workaround for the Intel compiler bug that was affecting ginutil.c. --- contrib/btree_gist/btree_utils_var.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'contrib/btree_gist') diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index 1f5ea126920..ae44e754913 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -439,18 +439,14 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree } -/* - * Fortunately, this sort comparison routine needn't be reentrant... - */ -static const gbtree_vinfo *gbt_vsrt_cmp_tinfo; - static int -gbt_vsrt_cmp(const void *a, const void *b) +gbt_vsrt_cmp(const void *a, const void *b, void *arg) { GBT_VARKEY_R ar = gbt_var_key_readable(((const Vsrt *) a)->t); GBT_VARKEY_R br = gbt_var_key_readable(((const Vsrt *) b)->t); + const gbtree_vinfo *tinfo = (const gbtree_vinfo *) arg; - return (*gbt_vsrt_cmp_tinfo->f_cmp) (ar.lower, br.lower); + return (*tinfo->f_cmp) (ar.lower, br.lower); } GIST_SPLITVEC * @@ -496,11 +492,11 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre } /* sort */ - gbt_vsrt_cmp_tinfo = tinfo; - qsort((void *) &arr[FirstOffsetNumber], - maxoff - FirstOffsetNumber + 1, - sizeof(Vsrt), - gbt_vsrt_cmp); + qsort_arg((void *) &arr[FirstOffsetNumber], + maxoff - FirstOffsetNumber + 1, + sizeof(Vsrt), + gbt_vsrt_cmp, + (void *) tinfo); /* We do simply create two parts */ -- cgit v1.2.3