diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-10-05 17:57:40 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-10-05 17:57:40 +0000 |
commit | e378f82e0029a7a6fda9c655bd79d4404e566c0b (patch) | |
tree | 744c1cd2841844ddf00880e80aae9ab7b460edfd /contrib/btree_gist/btree_utils_var.c | |
parent | f2332ea1e99e2a2d04d1744c86e899c52f5e841e (diff) | |
download | postgresql-e378f82e0029a7a6fda9c655bd79d4404e566c0b.tar.gz postgresql-e378f82e0029a7a6fda9c655bd79d4404e566c0b.zip |
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.
Diffstat (limited to 'contrib/btree_gist/btree_utils_var.c')
-rw-r--r-- | contrib/btree_gist/btree_utils_var.c | 20 |
1 files changed, 8 insertions, 12 deletions
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 */ |