@@ -127,7 +127,6 @@ variable_set(text *package_name, text *var_name,
127127 MemoryContext oldcxt ;
128128
129129 package = getPackageByName (package_name , true, false);
130- oldcxt = MemoryContextSwitchTo (package -> hctx );
131130 variable = createVariableInternal (package , var_name , typid ,
132131 is_transactional );
133132
@@ -138,10 +137,13 @@ variable_set(text *package_name, text *var_name,
138137
139138 scalar -> is_null = is_null ;
140139 if (!scalar -> is_null )
140+ {
141+ oldcxt = MemoryContextSwitchTo (package -> hctx );
141142 scalar -> value = datumCopy (value , scalar -> typbyval , scalar -> typlen );
143+ MemoryContextSwitchTo (oldcxt );
144+ }
142145 else
143146 scalar -> value = 0 ;
144- MemoryContextSwitchTo (oldcxt );
145147}
146148
147149static Datum
@@ -604,12 +606,9 @@ variable_insert(PG_FUNCTION_ARGS)
604606 strncmp (VARDATA_ANY (var_name ), LastVariable -> name ,
605607 VARSIZE_ANY_EXHDR (var_name )) != 0 )
606608 {
607- MemoryContext oldcxt ;
608- oldcxt = MemoryContextSwitchTo (package -> hctx );
609609 variable = createVariableInternal (package , var_name , RECORDOID ,
610610 is_transactional );
611611 LastVariable = variable ;
612- MemoryContextSwitchTo (oldcxt );
613612 }
614613 else
615614 {
@@ -981,7 +980,7 @@ variable_select_by_values(PG_FUNCTION_ARGS)
981980 oldcontext = MemoryContextSwitchTo (funcctx -> multi_call_memory_ctx );
982981
983982 funcctx -> tuple_desc = CreateTupleDescCopy (
984- ( * get_actual_value_record (variable )). tupdesc );
983+ get_actual_value_record (variable )-> tupdesc );
985984
986985 var = (VariableIteratorRec * ) palloc (sizeof (VariableIteratorRec ));
987986 var -> iterator = array_create_iterator (values , 0 , NULL );
@@ -1675,11 +1674,11 @@ createVariableInternal(HashPackageEntry *package, text *name, Oid typid,
16751674 if (variable )
16761675 {
16771676 ValueHistoryEntry * historyEntry ;
1678- memset (& variable -> data , 0 , sizeof (variable -> data ));
16791677 variable -> typid = typid ;
16801678 variable -> is_transactional = is_transactional ;
16811679 dlist_init (& (variable -> data ));
1682- historyEntry = palloc0 (sizeof (ValueHistoryEntry ));
1680+ historyEntry = MemoryContextAllocZero (package -> hctx ,
1681+ sizeof (ValueHistoryEntry ));
16831682 dlist_push_head (& variable -> data , & historyEntry -> node );
16841683 if (typid != RECORDOID )
16851684 {
@@ -1895,7 +1894,6 @@ popChangedVarsStack()
18951894static void
18961895addToChangedVars (HashPackageEntry * package , HashVariableEntry * variable )
18971896{
1898- MemoryContext oldcxt ;
18991897 ChangedVarsStackNode * cvsn ;
19001898 if (!changedVarsStack )
19011899 {
@@ -1911,12 +1909,10 @@ addToChangedVars(HashPackageEntry *package, HashVariableEntry *variable)
19111909 {
19121910 ChangedVarsNode * cvn ;
19131911 cvsn = dlist_head_element (ChangedVarsStackNode , node , changedVarsStack );
1914- oldcxt = MemoryContextSwitchTo (cvsn -> ctx );
1915- cvn = palloc0 (sizeof (ChangedVarsNode ));
1912+ cvn = MemoryContextAllocZero (cvsn -> ctx , sizeof (ChangedVarsNode ));
19161913 cvn -> package = package ;
19171914 cvn -> variable = variable ;
19181915 dlist_push_head (cvsn -> changedVarsList , & cvn -> node );
1919- MemoryContextSwitchTo (oldcxt );
19201916 }
19211917}
19221918
@@ -1927,7 +1923,7 @@ addToChangedVars(HashPackageEntry *package, HashVariableEntry *variable)
19271923 * upper level, it has savepoint there, so we need to release it.
19281924 */
19291925static void
1930- lelevUpOrRelease ()
1926+ levelUpOrRelease ()
19311927{
19321928 if (changedVarsStack )
19331929 {
@@ -2001,7 +1997,7 @@ pgvSubTransCallback(SubXactEvent event, SubTransactionId mySubid,
20011997 pushChangedVarsStack ();
20021998 break ;
20031999 case SUBXACT_EVENT_COMMIT_SUB :
2004- lelevUpOrRelease ();
2000+ levelUpOrRelease ();
20052001 break ;
20062002 case SUBXACT_EVENT_ABORT_SUB :
20072003 applyActionOnChangedVars (ROLLBACK_TO_SAVEPOINT );
0 commit comments