@@ -127,7 +127,6 @@ variable_set(text *package_name, text *var_name,
127
127
MemoryContext oldcxt ;
128
128
129
129
package = getPackageByName (package_name , true, false);
130
- oldcxt = MemoryContextSwitchTo (package -> hctx );
131
130
variable = createVariableInternal (package , var_name , typid ,
132
131
is_transactional );
133
132
@@ -138,10 +137,13 @@ variable_set(text *package_name, text *var_name,
138
137
139
138
scalar -> is_null = is_null ;
140
139
if (!scalar -> is_null )
140
+ {
141
+ oldcxt = MemoryContextSwitchTo (package -> hctx );
141
142
scalar -> value = datumCopy (value , scalar -> typbyval , scalar -> typlen );
143
+ MemoryContextSwitchTo (oldcxt );
144
+ }
142
145
else
143
146
scalar -> value = 0 ;
144
- MemoryContextSwitchTo (oldcxt );
145
147
}
146
148
147
149
static Datum
@@ -604,12 +606,9 @@ variable_insert(PG_FUNCTION_ARGS)
604
606
strncmp (VARDATA_ANY (var_name ), LastVariable -> name ,
605
607
VARSIZE_ANY_EXHDR (var_name )) != 0 )
606
608
{
607
- MemoryContext oldcxt ;
608
- oldcxt = MemoryContextSwitchTo (package -> hctx );
609
609
variable = createVariableInternal (package , var_name , RECORDOID ,
610
610
is_transactional );
611
611
LastVariable = variable ;
612
- MemoryContextSwitchTo (oldcxt );
613
612
}
614
613
else
615
614
{
@@ -981,7 +980,7 @@ variable_select_by_values(PG_FUNCTION_ARGS)
981
980
oldcontext = MemoryContextSwitchTo (funcctx -> multi_call_memory_ctx );
982
981
983
982
funcctx -> tuple_desc = CreateTupleDescCopy (
984
- ( * get_actual_value_record (variable )). tupdesc );
983
+ get_actual_value_record (variable )-> tupdesc );
985
984
986
985
var = (VariableIteratorRec * ) palloc (sizeof (VariableIteratorRec ));
987
986
var -> iterator = array_create_iterator (values , 0 , NULL );
@@ -1675,11 +1674,11 @@ createVariableInternal(HashPackageEntry *package, text *name, Oid typid,
1675
1674
if (variable )
1676
1675
{
1677
1676
ValueHistoryEntry * historyEntry ;
1678
- memset (& variable -> data , 0 , sizeof (variable -> data ));
1679
1677
variable -> typid = typid ;
1680
1678
variable -> is_transactional = is_transactional ;
1681
1679
dlist_init (& (variable -> data ));
1682
- historyEntry = palloc0 (sizeof (ValueHistoryEntry ));
1680
+ historyEntry = MemoryContextAllocZero (package -> hctx ,
1681
+ sizeof (ValueHistoryEntry ));
1683
1682
dlist_push_head (& variable -> data , & historyEntry -> node );
1684
1683
if (typid != RECORDOID )
1685
1684
{
@@ -1895,7 +1894,6 @@ popChangedVarsStack()
1895
1894
static void
1896
1895
addToChangedVars (HashPackageEntry * package , HashVariableEntry * variable )
1897
1896
{
1898
- MemoryContext oldcxt ;
1899
1897
ChangedVarsStackNode * cvsn ;
1900
1898
if (!changedVarsStack )
1901
1899
{
@@ -1911,12 +1909,10 @@ addToChangedVars(HashPackageEntry *package, HashVariableEntry *variable)
1911
1909
{
1912
1910
ChangedVarsNode * cvn ;
1913
1911
cvsn = dlist_head_element (ChangedVarsStackNode , node , changedVarsStack );
1914
- oldcxt = MemoryContextSwitchTo (cvsn -> ctx );
1915
- cvn = palloc0 (sizeof (ChangedVarsNode ));
1912
+ cvn = MemoryContextAllocZero (cvsn -> ctx , sizeof (ChangedVarsNode ));
1916
1913
cvn -> package = package ;
1917
1914
cvn -> variable = variable ;
1918
1915
dlist_push_head (cvsn -> changedVarsList , & cvn -> node );
1919
- MemoryContextSwitchTo (oldcxt );
1920
1916
}
1921
1917
}
1922
1918
@@ -1927,7 +1923,7 @@ addToChangedVars(HashPackageEntry *package, HashVariableEntry *variable)
1927
1923
* upper level, it has savepoint there, so we need to release it.
1928
1924
*/
1929
1925
static void
1930
- lelevUpOrRelease ()
1926
+ levelUpOrRelease ()
1931
1927
{
1932
1928
if (changedVarsStack )
1933
1929
{
@@ -2001,7 +1997,7 @@ pgvSubTransCallback(SubXactEvent event, SubTransactionId mySubid,
2001
1997
pushChangedVarsStack ();
2002
1998
break ;
2003
1999
case SUBXACT_EVENT_COMMIT_SUB :
2004
- lelevUpOrRelease ();
2000
+ levelUpOrRelease ();
2005
2001
break ;
2006
2002
case SUBXACT_EVENT_ABORT_SUB :
2007
2003
applyActionOnChangedVars (ROLLBACK_TO_SAVEPOINT );
0 commit comments