From 3ca7eddbb7c4803729d385a0c9535d8a972ee03f Mon Sep 17 00:00:00 2001
From: Teodor Sigaev <teodor@sigaev.ru>
Date: Wed, 28 Jan 2009 18:31:32 +0000
Subject: [PATCH] Fix bug with multiple evaluation of tsearch2 compatibility
 trigger, trigger data should be restored. Backpatch only for 8.3 because
 previous versions haven't such layer.

---
 contrib/tsearch2/tsearch2.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/contrib/tsearch2/tsearch2.c b/contrib/tsearch2/tsearch2.c
index ec68d3fdae7..2544bc24c10 100644
--- a/contrib/tsearch2/tsearch2.c
+++ b/contrib/tsearch2/tsearch2.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.8 2009/01/01 17:23:32 momjian Exp $
+ *	  $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.9 2009/01/28 18:31:32 teodor Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -367,8 +367,10 @@ tsa_tsearch2(PG_FUNCTION_ARGS)
 {
 	TriggerData *trigdata;
 	Trigger    *trigger;
-	char	  **tgargs;
+	char	  **tgargs, 
+			  **tgargs_old;
 	int			i;
+	Datum		res;
 
 	/* Check call context */
 	if (!CALLED_AS_TRIGGER(fcinfo))		/* internal error */
@@ -388,10 +390,20 @@ tsa_tsearch2(PG_FUNCTION_ARGS)
 
 	tgargs[1] = pstrdup(GetConfigOptionByName("default_text_search_config",
 											  NULL));
+	tgargs_old = trigger->tgargs;
 	trigger->tgargs = tgargs;
 	trigger->tgnargs++;
 
-	return tsvector_update_trigger_byid(fcinfo);
+	res = tsvector_update_trigger_byid(fcinfo);
+
+	/* restore old trigger data */
+	trigger->tgargs = tgargs_old;
+	trigger->tgnargs--;
+
+	pfree(tgargs[1]);
+	pfree(tgargs);
+
+	return res;
 }
 
 
-- 
GitLab