+ SPI_palloc(), SPI_repalloc(), SPI_pfree() - for allocations
authorVadim B. Mikheev
Wed, 24 Sep 1997 08:28:37 +0000 (08:28 +0000)
committerVadim B. Mikheev
Wed, 24 Sep 1997 08:28:37 +0000 (08:28 +0000)
in upper Executor memory context.

src/backend/executor/spi.c

index 186c0f0313ef145e066d27d3397e3974f6872301..12a511be27e5565f46e7dde285ac6b55594c7b1c 100644 (file)
@@ -69,6 +69,8 @@ extern void ShowUsage(void);
 
 #endif
 
+/* =================== interface functions =================== */
+
 int
 SPI_connect()
 {
@@ -487,6 +489,69 @@ SPI_getrelname(Relation rel)
    return (pstrdup(rel->rd_rel->relname.data));
 }
 
+void *
+SPI_palloc (Size size)
+{
+   MemoryContext   oldcxt = NULL;
+   void           *pointer;
+   
+   if (_SPI_curid + 1 == _SPI_connected)       /* connected */
+   {
+       if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
+           elog(FATAL, "SPI: stack corrupted");
+       oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
+   }
+   
+   pointer = palloc (size);
+   
+   if (oldcxt)
+       MemoryContextSwitchTo(oldcxt);
+   
+   return (pointer);
+}
+
+void *
+SPI_repalloc (void *pointer, Size size)
+{
+   MemoryContext   oldcxt = NULL;
+   
+   if (_SPI_curid + 1 == _SPI_connected)       /* connected */
+   {
+       if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
+           elog(FATAL, "SPI: stack corrupted");
+       oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
+   }
+   
+   pointer = repalloc (pointer, size);
+   
+   if (oldcxt)
+       MemoryContextSwitchTo(oldcxt);
+   
+   return (pointer);
+}
+
+void 
+SPI_pfree (void *pointer)
+{
+   MemoryContext   oldcxt = NULL;
+   
+   if (_SPI_curid + 1 == _SPI_connected)       /* connected */
+   {
+       if (_SPI_current != &(_SPI_stack[_SPI_curid + 1]))
+           elog(FATAL, "SPI: stack corrupted");
+       oldcxt = MemoryContextSwitchTo(_SPI_current->savedcxt);
+   }
+   
+   pfree (pointer);
+   
+   if (oldcxt)
+       MemoryContextSwitchTo(oldcxt);
+   
+   return;
+}
+
+/* =================== private functions =================== */
+
 /*
  * spi_printtup --
  *     store tuple retrieved by Executor into SPITupleTable