]> granicus.if.org Git - postgresql/commitdiff
+ SPI_palloc(), SPI_repalloc(), SPI_pfree() - for allocations
authorVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 24 Sep 1997 08:28:37 +0000 (08:28 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
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