aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_utils_var.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-10-05 17:57:40 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-10-05 17:57:40 +0000
commite378f82e0029a7a6fda9c655bd79d4404e566c0b (patch)
tree744c1cd2841844ddf00880e80aae9ab7b460edfd /contrib/btree_gist/btree_utils_var.c
parentf2332ea1e99e2a2d04d1744c86e899c52f5e841e (diff)
downloadpostgresql-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.c20
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 */